Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Koodipaja 21.9.2023
- print("Tervetuloa!")
- # UUSI TIEODSTO
- # Esimerkki 1: kahvin puoliintumisaikalaskuri aiemmalta koodipajalta,
- # pyydetään käyttäjältä aikaleima (HH:MM)
- import math
- from datetime import datetime
- # kahvin puoliintumisaika -laskuri
- # lähde: https://www.mathsisfun.com/algebra/exponential-growth.html
- # ks. kohta Half Life (kahviesimerkki)
- # 1 = kahvin määrä, esim 1 kuppi
- # kaava: y(9) = 1 e ^ ((ln(0.5)/6)×9) = 0.35
- # kaava = cup * exp^((ln(0.5)/half_life) * hours)
- # 1 kuppi = oletetaan että 300ml
- cup = 300
- # kofeiinin määrä puolittuu 3–6 tunnissa
- half_life = 4
- # kysytään käyttäjältä kellonaika muodossa HH:MM, huom
- # jos tunnit alle 10, aseta 0 eteen, esim. 09:45
- user_time = input("Milloin joit viimeksi kahvia? (HH:MM)\n")
- # ei ole optimaalinen ratkaisu, tilttaa helposti
- # jos esim syöttää kellonajan väärin, esim. 9:45
- # pilkotaan käyttäjän aika osiin
- user_hours = user_time[0:2]
- user_minutes = user_time[-2:]
- user_hours = int(user_hours)
- user_minutes = int(user_minutes)
- # tämänhetkinen aikaleima, otetaan tästä osia irti
- now = datetime.now()
- # otetaan kuluvan päivän vuosi, kk ja päivä omiin muuttujiin
- year = int(now.year)
- month = int(now.month)
- day = int(now.day)
- #then = datetime(2023, 9, 7, 11, 0, 0)
- #now = datetime(2023, 9, 7, 20, 0, 0)
- # rakennetaan aikaleima käyttäjän antaman ajan
- # perusteella sekä muutoin kuluvan päivän aikatiedoilla
- then = datetime(year, month, day, user_hours, user_minutes, 0)
- duration = now - then
- seconds = duration.total_seconds()
- # sekunnit minuuteiksi ja sitten tunneiksi
- minutes = seconds / 60
- # / = jakolasku, ja // jakolasku, mutta desimaalit jätetään pois
- hours = minutes // 60
- print(hours)
- # kaava = cup * exp^((ln(0.5)/half_life) * hours)
- # math.log Pythonissa = ln()
- logarithm = math.log(0.5) / half_life
- coffee_left = cup * math.exp(logarithm * hours)
- coffee_left = int(coffee_left)
- print(f"Kahvia jäljellä: {coffee_left} ml")
- # UUSI TIEDOSTO
- # tämä voitaisiin kysyä käyttäjältä
- word = "ahvi"
- # teksti, josta sanaa etsitään.
- # esim. jos halutaan että tämä teksti tunnistuu niin ettei se sisällä sanaa ahvi
- # kokeile myös, tätä tekstiä, joka toimii nyt:
- # text = "kahvi, pahvi ja monenlaista jahvia, mutta missä on tahvi."
- text = "kahvi, pahvi ja monenlaista jahvia, mutta missä on ahvi."
- # vaihe 1: jotta voidaan tunnistaa kokonainen sana paremmin,
- # lisätään välilyönnit sanan ympärille
- word = " " + word + " "
- # vaihe 2: muutetaan kaikki erikoismerkit välilyönneiksi
- # (tässä esimerkissä vain piste ja pilkku)
- text = text.replace(".", " ")
- text = text.replace(",", " ")
- # vaihe 3: lisätään text-muuttujaan alkuun ja loppuun yksi välilyönti
- text = " " + text + " "
- # loppujen lopuksi idea on tämä:
- # lisätään alkuun ja loppuun välilyönnit, sekä muutetaan erikoismerkit välilyönneiksi
- # tällä tavalla jos hakemamme sana on jossain päin tekstiä, se on aina siinä muodossa
- # että sen ympärillä on vähintään yhdet välilyönnit
- print(text)
- print(word)
- # tarkistetaan löytyy sana sellaisenaan tekstistä
- # ilman että se on jonkin toisen sanan sisällä
- if word in text:
- print("Sana löytyi!")
- else:
- print("Sanaa ei löytynyt.")
- # UUSI TIEDOSTO
- # puhelinnumeron tunnistaminen, onko oikeassa formaatissa
- # testiluontoinen koodi, tämä ei vielä riittäisi missään varsinaisessa sovelluksessa
- # suomen maakoodi = +358
- # esimerkki suomalaisesta puhelinnumerosta: +358401234567
- # suomalainen puhelinnumero +-muodossa on 13 merkkiä pitkä
- test = "+358401234567"
- print(len(test))
- # logiikka:
- # - ensimmäinen merkki on aina +
- # - maakoodin pituus vaihtelee 1-3 -merkkiä, +-merkin jälkeen
- # - pituus on 13 merkkiä?
- # - maakoodin jälkeinen osuus on aina 9 merkkiä (2 + 7, operaattorin
- # - osuus ilman ensimmäistä nollaa on 2 merkkiä)
- # +-merkin jälkeen pelkkiä numeroita
- # ---> riippuen maakoodin pituudesta, puhelinnumeron pituus on 11-13
- # tosiasiassa puhelinnumerot ovat vieläkin monimutkaisempia,
- # kannattaa harkita lisämoduulin käyttämistä tai muuta ratkaisua työelämässä (esim. regexp)
- # ks. https://www.tutorialspoint.com/phonenumbers-module-in-python
- # ks. https://stackoverflow.com/questions/8406765/international-phone-number-validation
- phone_number = input("Syötä puhelinnumero:\n")
- phone_number_length = len(phone_number)
- # kokeillaan ylläolevaa logiikkaa ihan koodilla
- # ensimmäinen merkki pitää olla +
- if phone_number[0:1] != "+":
- print("Vääränlainen puhelinnumero, +-merkki puuttuu alusta.")
- elif phone_number_length < 11 or phone_number_length > 13:
- # pituus pitää olla 11-13 välillä
- print("Vääränlainen puhelinnumero, väärä pituus (pitäisi olla 11-13)")
- elif phone_number[1:].isnumeric() == False:
- # +-merkin jälkeiset merkit pitää olla numeroita
- print("Vääränlainen puhelinnumero, tekstiä seassa.")
- else:
- # muutoin puhelinnumero on ok!
- print("Puhelinnumero ok!")
- # kokeillaan irroittaa maakoodi numeron alusta....
- # alustetaan country_code -muuttuja, ettei tule variable-scope -ongelmaa
- country_code = ""
- # tähän voisi tehdä hienomman tavan ettei
- # tarvitse erillistä if-lausetta jokaiselle pituudelle
- if phone_number_length == 13:
- country_code = phone_number[0:4]
- print(country_code)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement