Advertisement
tuomasvaltanen

Untitled

Sep 19th, 2023 (edited)
986
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.87 KB | None | 0 0
  1. # luento 4, merkkijonojen käsittely sekä virheiden hallinta
  2. print("Tervetuloa!")
  3.  
  4. # UUSI TIEDOSTO
  5.  
  6. # hipsuja ja lainausmerkkejä yhdistelmällä voidaan saada
  7. # myös kirjaimellisesti lainausmerkit tekstiin
  8. name = 'Matti "Mahtikoodari" Meikäläinen'
  9. print(name)
  10.  
  11. # jos halutaan kirjaimellisesti lainausmerkit tekstin sekaan
  12. # muista \", koska muutoin Pythonin syntaksi menee sekaisin
  13. # name = "Matti "Mahtikoodari" Meikäläinen"
  14. name = "Matti \"Mahtikoodari\" Meikäläinen"
  15. print(name)
  16.  
  17. # muutoin hipsuilla ja lainausmerkeillä ei datan osalta ole merkitystä
  18. name2 = "Matti"
  19. name3 = 'Matti'
  20.  
  21. print(name2)
  22. print(name3)
  23.  
  24. # UUSI TIEDOSTO
  25.  
  26. text = input("Anna jotain tekstiä:\n")
  27.  
  28. # osateksti, ensimmäisestä merkistä kymmenenteen merkkiin
  29. subtext1 = text[0:10]
  30. print(subtext1)
  31.  
  32. # osateksti, kuudennesta merkistä viidenteentoista merkkiin
  33. # eli pituus yhteensä = 10
  34. subtext2 = text[5:15]
  35. print(subtext2)
  36.  
  37. # osateksti, otetaan viisi viimeistä merkkiä
  38. subtext3 = text[-5:]
  39. print(subtext3)
  40.  
  41. # osateksti, ota kaikki merkit viidennen merkin jälkeen
  42. subtext4 = text[5:]
  43. print(subtext4)
  44.  
  45. # UUSI TIEDOSTO
  46.  
  47. # joskus tekstidatassa on lopussa ylimääräisiä merkkejä
  48. # mitä halutaan siivota
  49. years = "2022-2021-2020-2019-2018-"
  50. print(years)
  51.  
  52. # otetaan ensimmäisestä merkistä eteenpäin toiseksi viimeiseen merkkiin
  53. years = years[0:-1]
  54. print(years)
  55.  
  56. # UUSI TIEDOSTO
  57.  
  58. text = input("Anna jokin lause:\n")
  59.  
  60. # tekstin pituus, eli merkkimäärä
  61. text_length = len(text)
  62. print(f"Tekstissä merkkejä: {text_length} kpl")
  63.  
  64. # lasketaan pienet a-kirjaimet tekstistä
  65. # HUOM! isot ja pienet kirjaimet ovat ohjelmointikielessä
  66. # täysin eri kirjaimia
  67. a_letters = text.count("a")
  68. print(f"Tekstissä a-kirjaimia: {a_letters} kpl")
  69. print()
  70.  
  71. # reagoidaan ehtolauseella merkkimäärään
  72. if text_length > 30:
  73.     print("Pitkä lause!")
  74. else:
  75.     print("Lyhyt lause...")
  76.  
  77. # erittäin yleinen testi: onko teksti tyhjä vai ei?
  78. if text_length == 0:
  79.     print("Teksti on tyhjä!")
  80. else:
  81.     print("Teksti ei ole tyhjä.")
  82.  
  83. # UUSI TIEDOSTO
  84.  
  85. text = "Rovaniemi"
  86.  
  87. # tekstin kääntäminen on Pythonissa hieman erikoinen
  88. # käytännössä käytetään osatekstiä, mutta haetaan tekstiä väärään suuntaan
  89. reversed_text = text[::-1]
  90. print(reversed_text)
  91.  
  92. # UUSI TIEDOSTO
  93.  
  94. drinks = "mehu, maito, kahvi, tee, mehu"
  95. print(drinks)
  96.  
  97. # oletuksena replace korvaa kaikki sanat mitkä löytyy
  98. # jos käytetään drinks.replace("mehu", "vichy", 1),
  99. # korvataan vain ensimmäinen "mehu"
  100. # muista tallentaa tulos muuttujaan, pelkkä replace() -ei tee mitään
  101. drinks = drinks.replace("mehu", "vichy")
  102. print(drinks)
  103. print()
  104.  
  105. # toinen tapa poistaa ylimääräinen välilyönti on käyttää strip() -funktiota
  106. new_drinks = drinks.replace(", ", "\n")
  107. print(new_drinks)
  108. print()
  109.  
  110. usertext = input("Mitä juomaa haluat?\n")
  111.  
  112. # jos halutaan löytää onko annettu sana tekstimuuttujassa:
  113. # voidaan käyttää if-in -komentoa
  114. if usertext in drinks:
  115.     print("Löytyi!")
  116. else:
  117.     print("Ei löytynyt...")
  118.  
  119. # UUSI TIEDOSTO
  120.  
  121. text = input("Anna joko numero tai tekstiä:\n")
  122.  
  123. # jos haluaa käyttää desimaaliarvoja,
  124. # voidaan ottaa piste pois ennen if-lausetta
  125. # text_new = text.replace(".", "")
  126.  
  127. # sama asia kuin if text.isnumeric() == True:
  128. # ohjelmassa on nyt kaksi haaraa riippuen siitä
  129. # syöttikö käyttäjä tekstiä vai numeron
  130. if text.isnumeric():
  131.     print("Annoit numeron!")
  132.     number = int(text)
  133.     number = number * 2
  134.     print(number)
  135. else:
  136.     print("Annoit tekstiä!")
  137.  
  138. # UUSI TIEDOSTO
  139.  
  140. text = input("Opiskelija vai aikuinen? (o/a):\n")
  141.  
  142. # muutetaan käyttäjän syöte pieniksi kirjaimiksi
  143. # tämän avulla myös iso A ja iso O toimivat alemmassa
  144. # ehtolauseessa!
  145. text = text.lower()
  146.  
  147. # reagoidaan käyttäjän valintaan
  148. if text == "o":
  149.     print("Opiskelija!")
  150. elif text == "a":
  151.     print("Aikuinen!")
  152. else:
  153.     print("Väärä valinta...")
  154.  
  155. # UUSI TIEDOSTO
  156.  
  157. # otetaan hallitusti koppi mahdollisesta virhetilanteesta
  158. # esim. jos käyttäjä syöttää numeron sijasta tekstiä, esim. paloauto
  159. try:
  160.     number = input("Anna numero:\n")
  161.     number = int(number)
  162.     number = number * 2
  163.     print(number)
  164. except ValueError:
  165.     print("Syötit tekstiä. Käynnistä ohjelma uudelleen!")
  166.  
  167. # UUSI TIEDOSTO
  168.  
  169. # otetaan hallitusti koppi mahdollisesta virhetilanteesta
  170. # esim. jos käyttäjä syöttää numeron sijasta tekstiä, esim. paloauto
  171.  
  172. # huom: jokainen eri virhetyyppi pitää ottaa kiinni
  173. # tässä tapauksessa teksti, tai jos syöttää 0
  174. # huom: 0 on numero, siksi se ei mene ValueErroriin
  175. try:
  176.     number = input("Anna numero:\n")
  177.     number = int(number)
  178.  
  179.     # tämä tuottaa ZeroDivisionErrorin, jos number on 0
  180.     divided = 100 / number
  181.  
  182.     print(divided)
  183. except ValueError:
  184.     print("Syötit tekstiä. Käynnistä ohjelma uudelleen!")
  185. except ZeroDivisionError:
  186.     print("Nollalla ei saa jakaa, syötä jokin muu numero.")
  187.  
  188. # UUSI TIEDOSTO
  189.  
  190. # voidaan myös geneerisesti ottaa kaikki virheet huomioon kerralla
  191. # tässä tapauksessa virheviestit tulevat suoraan Pythonista
  192. # eivätkä välttämättä ole kovin loppukäyttäjäystävällisiä
  193. try:
  194.     number = input("Anna numero:\n")
  195.     number = int(number)
  196.  
  197.     # tämä tuottaa ZeroDivisionErrorin, jos number on 0
  198.     divided = 100 / number
  199.  
  200.     print(divided)
  201. except Exception as e:
  202.     print(f"Virhe: {e}")
  203.  
  204. # UUSI TIEDOSTO
  205.  
  206. # Tämä esimerkki yhdistelee kaikkia, eli ehtolauseita, merkkijono-operaatioita
  207. # sekä virheenkäsittelyä
  208.  
  209. # Tehdään ohjelma, joka tarkistaa, onko annettu asiakastunnus oikeassa muodossa
  210. # esim. teleoperaattorin asiakastunnus tai vastaava ym.
  211. # esimerkki asiakastunnuksesta: A1234_2345
  212.  
  213. # Logiikka: tunnus on aina tasan 10 merkkiä pitkä, ja kuudes merkki on aina alaviiva
  214.  
  215. # käytetään varmuudeksi try/exceptiä koko ohjelmalle ettei tule varsinaista virhettä
  216. # ja ettei ohjelma kaadu/tilttaa
  217. try:
  218.     # pyydetään asiakastunnus käyttäjältä
  219.     client = input("Syötä asiakastunnus:\n")
  220.  
  221.     text_length = len(client)
  222.  
  223.     # tarkistetaan että tunnus on tasan 10 merkkiä pitkä
  224.     if text_length != 10:
  225.         print("Tunnus on väärän mittainen (vaaditaan 10 merkkiä.)")
  226.     elif client[5] != "_":
  227.         # huom: ensimmäinen merkki alkaa 0:sta, joten kuudes merkki on [5]
  228.         print("Tunnuksesta puuttuu alaviiva (kuudes merkki).")
  229.     else:
  230.         # jos kaksi ylempää if-elif olivat ok, tullaan lopulta tähän else-lauseeseen
  231.         print("Tunnus OK!")
  232.  
  233.         # otetaan osatekstillä tunnuksen alku- ja loppuosa irti
  234.         id = client[0:5]
  235.         order = client[6:10]
  236.         order = int(order)
  237.  
  238.         print(id)
  239.         print(order)
  240.  
  241. except Exception as e:
  242.     # except ottaa lopuksi viimeistään kiinni, jos joku syöttää
  243.     # asiakastunnuksen toisessa osassa kirjaimen
  244.     # esim. A4321_567Y (ks. rivi jossa muutetaan order kokonaisluvuksi)
  245.     print(f"Virhe: {e}")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement