Advertisement
tuomasvaltanen

Untitled

Oct 7th, 2024 (edited)
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.72 KB | None | 0 0
  1. # luento 5, 7.10.2024, merkkijonot ja virheenkäsittely
  2. print("Tervetuloa!")
  3.  
  4. # UUSI TIEDOSTO
  5.  
  6. # hipsuja ja lainausmerkkejä yhdistelemä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. # hipsuilla ja lainausmerkeillä ei muutoin ole datan osalta merkitystä
  18. # kumpikin käy
  19. name2 = "Matti"
  20. name3 = 'Matti'
  21. print(name2)
  22. print(name3)
  23.  
  24. # UUSI TIEDOSTO
  25.  
  26. # kysytään tekstiä käyttäjältä, huom: älä muuta numeroksi
  27. # sillä haluamme pitää tämän tekstiformaatissa
  28. text = input("Anna jotain tekstiä:\n")
  29.  
  30. # osateksti, ensimmäisestä merkistä kymmenenteen merkkiin
  31. subtext1 = text[0:10]
  32. print(subtext1)
  33.  
  34. # osateksti, kuudennesta merkistä viidenteentoista merkkiin
  35. subtext2 = text[5:15]
  36. print(subtext2)
  37.  
  38. # osateksti, viimeiset viisi merkkiä:
  39. subtext3 = text[-5:]
  40. print(subtext3)
  41.  
  42. # osateksti, kaikki teksti viidennen merkiin jälkeen
  43. subtext4 = text[5:]
  44. print(subtext4)
  45.  
  46. # UUSI TIEDOSTO
  47.  
  48. # joskus tekstidatassa on lopussa ylimääräisiä merkkejä
  49. # mitkä halutaan siivota pois
  50. years = "2022-2021-2020-2019-2018-"
  51.  
  52. # poistetaan viimeinen merkki
  53. # eli käytännössä otetaan ensimmäisestä merkistä toiseksi viimeiseen merkkiin
  54. years = years[0:-1]
  55. print(years)
  56.  
  57. # UUSI TIEDOSTO
  58.  
  59. # kysytään käyttäjältä tekstiä
  60. text = input("Anna jokin lause:\n")
  61.  
  62. # tekstin pituus saadaan kätevästi len() -funktiolla!
  63. text_length = len(text)
  64. print(f"Tekstissä merkkejä: {text_length} kpl")
  65.  
  66. # voidaan myös käyttää ehtolauseessa,
  67. # jos tekstin pituuteen halutaan reagoida
  68. if text_length > 30:
  69.     print("Pitkä lause!")
  70. else:
  71.     print("Lyhyt lause...")
  72.  
  73. # lasketaan pienet a-kirjaimet tekstistä
  74. # HUOM! ohjelmoinnissa pienet ja isot kirjaimet ovat eri kirjaimia
  75. a_letters = text.count("a")
  76. print(f"Tekstissä a-kirjaimia: {a_letters} kpl")
  77.  
  78. # jos on tarve reagoida tyhjään tekstiin erikseen,
  79. # sekin onnistuu len-funktiolla
  80. # myös voitaisiin tarkistaa että onhan tekstin pituus
  81. # alle 200 merkkiä (usein rajoitus nettilomakkeissa)
  82. # tai esim. onhan uuden salasanan pituus vähintään 13 merkkiä jne jne.
  83. if text_length == 0:
  84.     print("Teksti on tyhjä!")
  85. else:
  86.     print("Teksti ei ole tyhjä...")
  87.  
  88. # UUSI TIEDOSTO
  89.  
  90. text = "Rovaniemi"
  91.  
  92. # tekstin kääntäminen on Pythonissa hieman erikoinen
  93. # käytännössä käytetään osatekstiä, mutta haetaan tekstiä väärään suuntaan
  94. # ja sivutuotteena teksti kääntyy toisinpäin
  95. reversed_text = text[::-1]
  96. print(reversed_text)
  97.  
  98. # UUSI TIEDOSTO
  99.  
  100. drinks = "mehu, maito, kahvi, tee, mehu"
  101. print(drinks)
  102.  
  103. # oletuksena replace() korvaa kaikki sanat mitkä
  104. # löytyy jos käytetään drinks.replace("mehu", "vichy")
  105. # jos haluat korvata esim. vain ensimmäisen, kokeile:
  106. #drinks.replace("mehu", "vichy", 1)
  107. # replace -> mikä korvataan, ja millä se korvataan
  108. # muista tallentaa tulos muuttujaan, pelkkä replace ei tee mitään
  109. drinks = drinks.replace("mehu", "vichy")
  110. print(drinks)
  111. print()
  112.  
  113. # jos haluat poistaa tekstistä ylimääräiset välilyönnit,
  114. # muista strip() -funktio
  115. new_drinks = drinks.replace(", ", "\n")
  116. print(new_drinks)
  117.  
  118. # kokeillaan löytää käyttäjän antama sana muuttujasta
  119. usertext = input("Mitä juomaa haluat?\n")
  120.  
  121. # jos halutaan löytää onko annettu sana tekstimuuttujassa
  122. # voidaan käyttää if-in -komentoa
  123. if usertext in drinks:
  124.     print("Löytyi!")
  125. else:
  126.     print("Ei löytynyt...")
  127.  
  128. # UUSI TIEDOSTO
  129. text = input("Anna numero tai tekstiä:\n")
  130.  
  131. # jos haluaa käyttää desimaaliarvoja
  132. # voidaan ottaa piste pois ennen if-lausetta
  133. # text_new = text.replace(".", "")
  134.  
  135. # sama asia kuin if text.isnumeric() == True:
  136. # ohjelmassa on nyt kaksi haaraa riippuen siitä
  137. # syöttikö käyttäjä tekstiä vai numeron
  138. # ERITTÄIN HYVÄ LÄHTÖKOHTA LISÄTEHTÄVÄSSÄ 4-7
  139. if text.isnumeric():
  140.     print("Annoit numeron!")
  141.     number = int(text)
  142.     number = number * 2
  143.     print(number)
  144. else:
  145.     print("Annoit tekstiä!")
  146.  
  147. # UUSI TIEDOSTO
  148.  
  149. text = input("Opiskelija vai aikuinen? (o/a):\n")
  150.  
  151. # ennen kuin vertaillaan mitä käyttäjä syötti
  152. # muutetaan käyttäjän syöttämä kirjain pieneksi
  153. # tämän avulla ei tarvitse erikseen if-lauseissa
  154. # testata isoja kirjaimia
  155. text = text.lower()
  156.  
  157. # nyt vertailun pitäisi toimia sekä isoilla
  158. # että pienillä kirjaimilla
  159. if text == "o":
  160.     print("Opiskelija!")
  161. elif text == "a":
  162.     print("Aikuinen!")
  163. else:
  164.     print("Väärä valinta...")
  165.  
  166. # UUSI TIEDOSTO
  167.  
  168. # otetaan hallitusti koppi mahdollisesti virhetilanteesta
  169. # esim. jos käyttäjä syöttää numeron sijasta tekstiä, esim. postilaatikko
  170. try:
  171.     number = input("Anna numero:\n")
  172.     number = int(number)
  173.     number = number * 2
  174.     print(number)
  175. except ValueError:
  176.     # exceptin takia, voimme itse tulostaa vikatilanteesta viestin
  177.     # eikä ohjelma varsinaisesti tilttaa/kaadu punaisen virheen myötä
  178.     print("Syötit tekstiä. Käynnistä ohjelma uudelleen!")
  179.  
  180. # UUSI TIEDOSTO
  181.  
  182. # otetaan hallitusti koppi mahdollisesti virhetilanteesta
  183. # esim. jos käyttäjä syöttää numeron sijasta tekstiä, esim. postilaatikko
  184. try:
  185.     number = input("Anna numero:\n")
  186.     number = int(number)
  187.     divided = 100 / number
  188.     print(divided)
  189. except ValueError:
  190.     # exceptin takia, voimme itse tulostaa vikatilanteesta viestin
  191.     # eikä ohjelma varsinaisesti tilttaa/kaadu punaisen virheen myötä
  192.     print("Syötit tekstiä. Käynnistä ohjelma uudelleen!")
  193. except ZeroDivisionError:
  194.     # tämä except ottaa huomioon nollalla jakamisen
  195.     # koska ValueError ei sitä ota kiinni (koska 0 on aivan ok kokonaisluku)
  196.     print("Nollalla ei voi jakaa, syötä jokin muu kokonaisuluku.")
  197.  
  198. # UUSI TIEDOSTO
  199.  
  200. # otetaan hallitusti koppi mahdollisesti virhetilanteesta
  201. # esim. jos käyttäjä syöttää numeron sijasta tekstiä, esim. postilaatikko
  202. try:
  203.     number = input("Anna numero:\n")
  204.     number = int(number)
  205.     divided = 100 / number
  206.     print(divided)
  207. except Exception as e:
  208.     print(f"Virhe: {e}")
  209.     print("Ohjelman käytössä tapahtui odottamaton virhe.")
  210.     print("Ota yhteyttä tekniseen ylläpitoon.")
  211.  
  212. # UUSI TIEDOSTO
  213.  
  214. # Tämä esimerkki yhdistelee kaikkia, eli ehtolauseita, merkkijono-operaatioita
  215. # sekä virheenkäsittelyä
  216.  
  217. # Tehdään ohjelma, joka tarkistaa, onko annettu asiakastunnus oikeassa muodossa
  218. # esim. teleoperaattorin asiakastunnus tai vastaava ym.
  219. # esimerkki asiakastunnuksesta: A1234_2345
  220.  
  221. # Logiikka: tunnus on aina tasan 10 merkkiä pitkä, ja kuudes merkki on aina alaviiva
  222.  
  223. # tehdään varmuudeksi try/except koko ohjelmalle, ettei tule varsinaista virhettä
  224. # ja ettei ohjelma kaadu/tilttaa
  225. try:
  226.     client = input("Syötä asiakastunnus:\n")
  227.  
  228.     text_length = len(client)
  229.  
  230.     # tarkistetaan että tunnus on tasan 10 merkkiä pitkä
  231.     if text_length != 10:
  232.         print("Tunnus on väärän mittainen (vaaditaan 10 merkkiä)")
  233.     elif client[5] != "_":
  234.         # huom: ensimmäinen merkki alkaa 0:sta, eli kuudes merkki on [5]
  235.         print("Tunnuksesta puuttuu alaviiva (kuudes merkki).")
  236.     else:
  237.         # jos kaksi ylempää if-elif -lausetta oli ok, tullaan
  238.         # lopulta tähän else-lauseeseen
  239.         print("Tunnus ok!")
  240.  
  241.         # otetaan osatekstillä tunnuksen alku- ja loppuosa irti
  242.         identifier = client[0:5]
  243.         order = client[6:10]
  244.         order = int(order)
  245.  
  246.         # tulostetaan irroitetu tunnisteet
  247.         print(identifier)
  248.         print(order)
  249.  
  250. except Exception as e:
  251.     # except ottaa lopuksi viimeistään kiinni, jos jokin menee pieleen
  252.     print(f"Virhe: {e}")
  253.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement