Advertisement
tuomasvaltanen

Untitled

Sep 21st, 2023 (edited)
675
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.37 KB | None | 0 0
  1. # Koodipaja 21.9.2023
  2. print("Tervetuloa!")
  3.  
  4. # UUSI TIEODSTO
  5.  
  6. # Esimerkki 1: kahvin puoliintumisaikalaskuri aiemmalta koodipajalta,
  7. # pyydetään käyttäjältä aikaleima (HH:MM)
  8.  
  9. import math
  10. from datetime import datetime
  11.  
  12. # kahvin puoliintumisaika -laskuri
  13. # lähde: https://www.mathsisfun.com/algebra/exponential-growth.html
  14. # ks. kohta Half Life (kahviesimerkki)
  15.  
  16. # 1 = kahvin määrä, esim 1 kuppi
  17. # kaava: y(9) = 1 e ^ ((ln(0.5)/6)×9) = 0.35
  18. # kaava = cup * exp^((ln(0.5)/half_life) * hours)
  19.  
  20. # 1 kuppi = oletetaan että 300ml
  21. cup = 300
  22.  
  23. # kofeiinin määrä puolittuu 3–6 tunnissa
  24. half_life = 4
  25.  
  26. # kysytään käyttäjältä kellonaika muodossa HH:MM, huom
  27. # jos tunnit alle 10, aseta 0 eteen, esim. 09:45
  28. user_time = input("Milloin joit viimeksi kahvia? (HH:MM)\n")
  29.  
  30. # ei ole optimaalinen ratkaisu, tilttaa helposti
  31. # jos esim syöttää kellonajan väärin, esim. 9:45
  32.  
  33. # pilkotaan käyttäjän aika osiin
  34. user_hours = user_time[0:2]
  35. user_minutes = user_time[-2:]
  36.  
  37. user_hours = int(user_hours)
  38. user_minutes = int(user_minutes)
  39.  
  40. # tämänhetkinen aikaleima, otetaan tästä osia irti
  41. now = datetime.now()
  42.  
  43. # otetaan kuluvan päivän vuosi, kk ja päivä omiin muuttujiin
  44. year = int(now.year)
  45. month = int(now.month)
  46. day = int(now.day)
  47.  
  48. #then = datetime(2023, 9, 7, 11, 0, 0)
  49. #now = datetime(2023, 9, 7, 20, 0, 0)
  50.  
  51. # rakennetaan aikaleima käyttäjän antaman ajan
  52. # perusteella sekä muutoin kuluvan päivän aikatiedoilla
  53. then = datetime(year, month, day, user_hours, user_minutes, 0)
  54.  
  55. duration = now - then
  56. seconds = duration.total_seconds()
  57.  
  58. # sekunnit minuuteiksi ja sitten tunneiksi
  59. minutes = seconds / 60
  60.  
  61. # / = jakolasku, ja // jakolasku, mutta desimaalit jätetään pois
  62. hours = minutes // 60
  63. print(hours)
  64.  
  65. # kaava = cup * exp^((ln(0.5)/half_life) * hours)
  66. # math.log Pythonissa = ln()
  67. logarithm = math.log(0.5) / half_life
  68. coffee_left = cup * math.exp(logarithm * hours)
  69. coffee_left = int(coffee_left)
  70.  
  71. print(f"Kahvia jäljellä: {coffee_left} ml")
  72.  
  73. # UUSI TIEDOSTO
  74.  
  75. # tämä voitaisiin kysyä käyttäjältä
  76. word = "ahvi"
  77.  
  78. # teksti, josta sanaa etsitään.
  79. # esim. jos halutaan että tämä teksti tunnistuu niin ettei se sisällä sanaa ahvi
  80. # kokeile myös, tätä tekstiä, joka toimii nyt:
  81. # text = "kahvi, pahvi ja monenlaista jahvia, mutta missä on tahvi."
  82. text = "kahvi, pahvi ja monenlaista jahvia, mutta missä on ahvi."
  83.  
  84. # vaihe 1: jotta voidaan tunnistaa kokonainen sana paremmin,
  85. # lisätään välilyönnit sanan ympärille
  86. word = " " + word + " "
  87.  
  88. # vaihe 2: muutetaan kaikki erikoismerkit välilyönneiksi
  89. # (tässä esimerkissä vain piste ja pilkku)
  90. text = text.replace(".", " ")
  91. text = text.replace(",", " ")
  92.  
  93. # vaihe 3: lisätään text-muuttujaan alkuun ja loppuun yksi välilyönti
  94. text = " " + text + " "
  95.  
  96. # loppujen lopuksi idea on tämä:
  97. # lisätään alkuun ja loppuun välilyönnit, sekä muutetaan erikoismerkit välilyönneiksi
  98. # tällä tavalla jos hakemamme sana on jossain päin tekstiä, se on aina siinä muodossa
  99. # että sen ympärillä on vähintään yhdet välilyönnit
  100. print(text)
  101. print(word)
  102.  
  103. # tarkistetaan löytyy sana sellaisenaan tekstistä
  104. # ilman että se on jonkin toisen sanan sisällä
  105. if word in text:
  106.     print("Sana löytyi!")
  107. else:
  108.     print("Sanaa ei löytynyt.")
  109.  
  110. # UUSI TIEDOSTO
  111.  
  112. # puhelinnumeron tunnistaminen, onko oikeassa formaatissa
  113. # testiluontoinen koodi, tämä ei vielä riittäisi missään varsinaisessa sovelluksessa
  114.  
  115. # suomen maakoodi = +358
  116. # esimerkki suomalaisesta puhelinnumerosta: +358401234567
  117. # suomalainen puhelinnumero +-muodossa on 13 merkkiä pitkä
  118. test = "+358401234567"
  119. print(len(test))
  120.  
  121. # logiikka:
  122. # - ensimmäinen merkki on aina +
  123. # - maakoodin pituus vaihtelee 1-3 -merkkiä, +-merkin jälkeen
  124. # - pituus on 13 merkkiä?
  125. # - maakoodin jälkeinen osuus on aina 9 merkkiä (2 + 7, operaattorin
  126. # - osuus ilman ensimmäistä nollaa on 2 merkkiä)
  127. # +-merkin jälkeen pelkkiä numeroita
  128.  
  129. # ---> riippuen maakoodin pituudesta, puhelinnumeron pituus on 11-13
  130. # tosiasiassa puhelinnumerot ovat vieläkin monimutkaisempia,
  131. # kannattaa harkita lisämoduulin käyttämistä tai muuta ratkaisua työelämässä (esim. regexp)
  132. # ks. https://www.tutorialspoint.com/phonenumbers-module-in-python
  133. # ks. https://stackoverflow.com/questions/8406765/international-phone-number-validation
  134.  
  135. phone_number = input("Syötä puhelinnumero:\n")
  136. phone_number_length = len(phone_number)
  137.  
  138. # kokeillaan ylläolevaa logiikkaa ihan koodilla
  139. # ensimmäinen merkki pitää olla +
  140. if phone_number[0:1] != "+":
  141.     print("Vääränlainen puhelinnumero, +-merkki puuttuu alusta.")
  142. elif phone_number_length < 11 or phone_number_length > 13:
  143.     # pituus pitää olla 11-13 välillä
  144.     print("Vääränlainen puhelinnumero, väärä pituus (pitäisi olla 11-13)")
  145. elif phone_number[1:].isnumeric() == False:
  146.     # +-merkin jälkeiset merkit pitää olla numeroita
  147.     print("Vääränlainen puhelinnumero, tekstiä seassa.")
  148. else:
  149.     # muutoin puhelinnumero on ok!
  150.     print("Puhelinnumero ok!")
  151.  
  152.     # kokeillaan irroittaa maakoodi numeron alusta....
  153.  
  154.     # alustetaan country_code -muuttuja, ettei tule variable-scope -ongelmaa
  155.     country_code = ""
  156.  
  157.     # tähän voisi tehdä hienomman tavan ettei
  158.     # tarvitse erillistä if-lausetta jokaiselle pituudelle
  159.     if phone_number_length == 13:
  160.         country_code = phone_number[0:4]
  161.  
  162.     print(country_code)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement