1 / 53

Ohjelmointia teknisille viestijöille

Tekninen viestintä 12.02.2013. Ohjelmointia teknisille viestijöille. TAPAHTUI VIIME JAKSOSSA. while -silmukka on yksi Pythonin sisäänrakennetuista silmukkarakenteista while -silmukka toistaa jotain tiettyä tehtävää, kunnes silmukasta poistumiseen vaadittava ehto täyttyy.

gflynn
Download Presentation

Ohjelmointia teknisille viestijöille

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tekninen viestintä12.02.2013 Ohjelmointia teknisille viestijöille

  2. TAPAHTUI VIIME JAKSOSSA • while-silmukka on yksi Pythonin sisäänrakennetuista silmukkarakenteista • while-silmukka toistaa jotain tiettyä tehtävää, kunnes silmukasta poistumiseen vaadittava ehto täyttyy nimi = input("Kerro nimesi: ").strip() while nimi == "": nimi = input("Nimi ei voi olla tyhjä. Kerro nimesi: ").strip()

  3. TAPAHTUI VIIME JAKSOSSA • Silmukan ehtona voi olla myös käyttäjältä kerättävien tietojen määrä: kurssit = [] print("Kerro kurssi, jolle haluat osallistua. Sinun tulee syöttää yhteensä viisi kurssia.") kurssi = input("Syötä kurssi: ") kurssit.append(kurssi) whilelen(kurssit) < 5: kurssi = input("Syötä kurssi: ").strip() kurssit.append(kurssi)

  4. TAPAHTUI VIIME JAKSOSSA • Silmukan ehtoja voi tarkentaa tarvittaessa loogisten operaattoreiden avulla: • salasana = "idkfa" • arvaus = input("Syötä salasana: ").strip() • yritykset = 0 • while arvaus != salasana and yritykset < 5: • arvaus = input("Syötä salasana: ").strip() • yritykset = yritykset + 1

  5. Tekninen viestintä12.02.2013 for-silmukka

  6. FOR-SILMUKKA • for-silmukka on toinen Pythonin silmukkarakenteista • For-silmukka rakentuu muuttujasta ja sarjasta • For-silmukkaa käytetään tavallisesti silloin kun ohjelmassa halutaan tarkastella jonkun sarjan jokaista elementtiä ja suorittaa kullekin elementille joku toiminto.

  7. FOR-SILMUKKA • Kun for-silmukkaa suoritetaan, ensimmäisellä suorituskerralla for-silmukan muuttuja saa arvokseen sarjan ensimmäisen arvon ja seuraavilla suorituskerroilla sarjan seuraavana vuorossa olevan arvon • For-silmukan suorituskertoja on helppo hallita silmukassa käytettävän sarjan pituutta muokkaamalla

  8. FOR-SILMUKKA • Jos haluat tulostaa luvut 1-10, voit tehdä sen tulostamalla numerot peräkkäisillä print-komennoilla... print(1) print(2) print(3) . . . print(9) print(10)

  9. FOR-SILMUKKA • ...tai voit luoda sarjan, jossa on numerot 1-10 ja luoda sen avulla for-silmukan for i in range(1,11): print(i)

  10. FOR-SILMUKKA • for-silmukan määrittävä lause for i in range(1,11) antaa Pythonille seuraavat ohjeet: • Luo range-funktiolla sarja, joka sisältää numerot 1, 2, 3, 4, 5, 6, 7, 8, 9 ja 10 • Tallenna aluksi sarjan ensimmäinen luku, 1, muuttujaan i • Suorita silmukkaan liittyvä sisennetty ohjelmalohko • Kun sisennetty ohjelmalohko on suoritettu, tallenna sarjan seuraava luku muuttujaan i

  11. FOR-SILMUKKA • Kun muuttujaan i on tallennettu sarjan senhetkinen arvo, arvoa voi käyttää sisennetyssä ohjelmalohkossa for i in range(1,11): print(i) for i in range(1,11): print(i * 5)

  12. FOR-SILMUKKA • Jos haluat vain toistaa tietyn tehtävän esim. kymmenen kertaa, voit käyttää range()-funktiossa vain yhtä parametria • Jos range()-funktioon syöttää vain pääteparametrin, funktio palauttaa sarjan joka alkaa nollasta ja päättyy ennen pääteparametria for i in range(10): print(i) >>> 0 >>> 1 >>> 2 >>> 3 >>> 4 >>> 5 >>> 6 >>> 7 >>> 8 >>> 9

  13. FOR-SILMUKKA • Toiston avulla voidaan suorittaa esim. laskutoimituksia, joissa arvo kasvaa tasaisesti jyvat = 1 yhteensa = 0 for ruutu in range(1, 65): print("Ruudussa {} on {} jyvää".format(ruutu, jyvat)) yhteensa += jyvat #TAI yhteensa = yhteensa + jyvat jyvat = jyvat * 2 print ("Jyvia kertyi yhteensa {}".format(yhteensa))

  14. FOR-SILMUKKA • Sarjaa määritettäessä käytettävän muuttujan nimen voi valita vapaasti • Myös sarja voi olla mikä tahansa Pythonin sarjatyypeistä • Koska merkkijonot ovat sarjoja, myös niitä voi käydä läpi merkki kerrallaan for-silmukan avulla for kirjain in "abcd": print (kirjain) for ostos in ("Maito", "Juusto", "Pekoni", "Nuudelit"): print(ostos)

  15. FOR-SILMUKKA • Sanakirjoja voi myös tarkastella for-silmukassa • Tällöin apuna täytyy käyttää sanakirjan keys()-funktiota, jolla sanakirjan avaimet saa muokattua sarjaksi sankarit = { "Marvel": ["Wolverine","Hawkeye","Musta Leski","Deadpool"], "DC": ["Batman", "Ihmenainen", "Flash", "Robin"]} for key in sankarit.keys(): print (sankarit[key])

  16. FOR-SILMUKKA • Jos sanakirjaan on tallennettu listoja (eli sarjoja), näiden sisältöä voi tarkastella laatimalla sisäkkäisen for-silmukan sankarit = { "Marvel":["Wolverine","Hawkeye","Musta Leski","Deadpool"], "DC": ["Batman", "Ihmenainen", "Flash", "Robin"], "Dark Horse":["Hellboy","Abe Sapien", "Miyamoto Usagi"]} for key in sankarit.keys(): print("{}-sankarit:".format(key)) for sankari in sankarit[key]: print(sankari) print("")

  17. FOR-SILMUKKA • Sisäkkäisissä for-silmukoissa sisempi silmukka suoritetaan kokonaan aina kun ulommassa silmukassa siirrytään yksi askel eteenpäin key: "Marvel" sankari: "Wolverine" sankari: "Hawkeye" sankari: "Musta Leski" sankari: "Deadpool" key: "DC" sankari: "Batman" sankari: "Ihmenainen" sankari: "Robin" sankari: "Flash" key: "Dark Horse" sankari: "Hellboy" sankari: "Abe Sapien" sankari: "Miyamoto Usagi"

  18. FOR-SILMUKKA • for-silmukoissa voi käyttää myös ehtolauseita käsiteltävän sarjan tarkastelun apuna # De-vokalisaattori VOKAALIT = "aieouyäö" # vakiot merkitään isoilla kirjaimilla alkuSana = input("Syötä sana, josta haluat poistaa vokaalit: ") uusiSana = "" for kirjain in alkuSana: if kirjain not in VOKAALIT: uusiSana = uusiSana + kirjain # tai uusiSana += kirjain print (uusiSana)

  19. Miniprojekti: konttikääntäjä • Johtaja Mahamies haluaa oppia puhumaan kontinkieltä voidakseen loistaa pikkujouluissa • Jotta homma onnistuisi, johtaja tarvitsee ohjelman, joka kääntää lauseita kontinkielelle • Laaditaan ohjelma split()-funktiota apuna käyttäen • sanat = "Tässä on muutaman sanan lause" • sanalista = sanat.split() • ["Tässä", "on", "muutaman", "sanan", "lause"]

  20. HARJOITUS: FOR-SILMUKKA • Laadi ohjelma, joka: • pyytää käyttäjää syöttämään tekstin • pyytää käyttäjää kertomaan kuinka monta kertaa teksti tulisi tulostaa • tulostaa tekstin niin monta kertaa kuin käyttäjä tahtoi

  21. HARJOITUS: FOR-SILMUKKA • Laadi ohjelma, joka: • pyytää käyttäjää syöttämään viisi ostoslistalle lisättävää ostosta • tallentaa käyttäjän syöttämät ostokset ostoslistalle • järjestelee ostoslistan aakkosjärjestykseen • tulostaa numeroidun ostoslistan • Esim: >>> 1. Maitoa >>> 2. Strutsi >>> 3. Kumiankka >>> ...

  22. HARJOITUS: FOR-SILMUKKA • Laadi FizzBuzz-ohjelma, eli ohjelma joka tulostaa luvut 1-50, mutta: • Tulostaa tekstin "Fizz", jos luku on jaollinen kolmella • Tulostaa tekstin "Buzz", jos luku on jaollinen viidellä • Tulostaa tekstin "FizzBuzz", jos luku on jaollinen kolmella ja viidellä

  23. Tekninen viestintä12.02.2013 Tiedostojen tutkailu

  24. OS-MODUULI • os-moduuli on Python-moduuli, jonka avulla ohjelmissa voi käyttää käyttöjärjestelmän komentoja • os-moduulissa on aliohjelmia, joiden avulla ohjelmasi voi esim. luoda ja poistaa hakemistoja, ja lukea hakemistojen sisältöjä • Tämän lisäksi os-moduuli sisältää path-moduulin, jossa on hakemistopolkujen käsittelyyn liittyviä aliohjelmia

  25. OS-MODUULI • Tietyssä hakemistossa olevien tiedostojen listaaminen onnistuu listdir()-funktion avulla • listdir()-funktio palauttaa käyttäjälle listan parametrina annetun hakemiston tiedostoista ja alihakemistoista import os hakemisto = os.listdir(".") for tiedosto in hakemisto: print(tiedosto)

  26. OS-MODUULI • listdir()-aliohjelman parametrina voit käyttää joko absoluuttista tai suhteellista polkua ABSOLUUTTINEN POLKU: C:\Python34\test.py X:\TECHS5\Harjoitukset\teht4c.py SUHTEELLINEN POLKU: . - tämänhetkinenhakemisto .. - Jos ohjelmasuoritetaanhakemistossa c:\test\python, tarkoittaahakemistoa c:\test sub1\sub2 - tarkoittaatämänhetkisenhakemistonalihakemistonsub1 alihakemistoasub2 ..\sub1 - Jos ohjelmasuoritetaanhakemistossa C:\test\python, tarkoittaahakemistoa c:\test\sub1

  27. OS-MODUULI • Python sallii tiedostoihin viittaamisen suoraan merkkijonon avulla: • Jotta ohjelma olisi helpompi siirtää käyttöjärjestelmästä toiseen, tämä tapa ei kuitenkaan ole suositeltava. • Windows-järjestelmissä kenoviiva on hakemistopolkujen erotin, mutta *nix-järjestelmissä hakemistopolkujen erottimena käytetään vinoviivaa tiedosto = open ("c:\\hakemisto\\tiedosto.txt")

  28. OS-MODUULI • os-moduulin os.sep-komponentti tuottaa haluttuun kohtaan käyttöjärjestelmäkohtaisen hakemistopolun erottimen • Hakemistopolun saa määritettyä myös os.path-moduulin join() –aliohjelman avulla import os polku = "C:" + os.sep + "Python34" + os.sep + "test.py" import os,os.path polku = os.path.join("C:",os.sep,"Python34", "test.py")

  29. TIEDOSTOJEN LUKEMINEN • Tekstitiedostoja voi avata open()-funktiolla • Oletuksena tiedosto avataan vain luku-tilassa • Tilan, jossa tiedosto avataan, voi määrittää lisäparametrin avulla: tiedostonimi = os.path.join("c:",os.sep,"jokuteksti.txt") tiedosto = open (tiedostonimi) tiedostonimi = os.path.join("c:",os.sep,"jokuteksti.txt") tiedosto = open (tiedostonimi, "r") - Vain luku tiedosto = open (tiedostonimi, "w") - Kirjoitus tiedosto = open (tiedostonimi, "a") - Lisäys

  30. TIEDOSTOJEN LUKEMINEN • Jos avaat kirjoitustilassa tiedoston, jossa on jo jotain sisältöä, Python kirjoittaa määrittämäsi tekstirivit olemassaolevan sisällön päälle • Jos haluat säästää aiemman sisällön, muista avata tiedosto lisäystilassa.

  31. TIEDOSTOJEN LUKEMINEN • Pythonin näkökulmasta open()-funkiolla avattu ja muuttujaan tallennettu tiedosto on sarja - sen voi siis lukea for-silmukan avulla • Sarjan elementtejä ovat esim. tekstitiedoston yksittäiset rivit: tiedostoNimi = os.path.join("c:",os.sep,"jokuTiedosto.txt") munTiedosto = open(tiedostoNimi, "r") for rivi in munTiedosto: print (rivi)

  32. TIEDOSTOON KIRJOITTAMINEN • write() on perusfunktio, jolla voit kirjoittaa tekstiä tiedostoon. • write()-funktio vaatii, että tiedosto, johon kirjoitetaan on avattu kirjoitus- tai lisäystilassa • write()-funktiota käytettäessä tulee rivinvaihto lisätä \n -erikoismerkillä filename = os.path.join("c:",os.sep,"docs","gradu.txt") newFile = open(filename, "w") newFile.write("Smort sentence with original thoughts.\n") newFile.write("Anothersmort sentence.\n") newFile.close()

  33. TIEDOSTOON KIRJOITTAMINEN • Kun tiedosto on kirjoitettu tai luettu, eikä sitä enää tarvita, tulee tiedosto sulkea close()-aliohjelmalla, jottei tiedosto jää turhaan muistiin: • Jos tiedostoa ei suljeta, Python ei välttämättä kirjoita kaikkea tekstiä tiedostoon filename = os.path.join("c:",os.sep,"docs","gradu.txt") newFile = open(filename, "w") newFile.write("Smort stuff\n") newFile.close()

  34. TIEDOSTOJEN POISTAMINEN • Tiedostojen poistaminen onnistuu remove()-funktion avulla: import os,os.path tiedosto = os.path.join("c:", os.sep, "Python34", "tiedosto.txt") os.remove(tiedosto)

  35. VIRHEIDEN VÄISTELY • Jos yrität lukea sisältöä tiedostosta, jota ei ole olemassa, Python muistaa sinua virheilmoituksella • Tiedoston olemassaolon voi Pythonissa tarkistaa os.path-moduulista löytyvän exists()-funktion avulla: import os, os.path tiedosto = os.path.join("c:", os.sep, "temp", "tiedosto.txt") ifos.path.exists(tiedosto): file = open(tiedosto)

  36. VIRHEIDEN VÄISTELY • Luku-operaatio voi myös epäonnistua jos luettavaksi määritetty kohde ei ole tiedosto vaan hakemisto • Jos ohjelmalla halutaan tarkastaa onko käyttäjän syöttämän nimen takana tiedosto vai hakemisto, voidaan apuna käyttää os.path-moduulin isdir()- ja isfile()-funktioita: haku = input("Syötä tiedoston/hakemiston nimi: ") if os.path.isdir(haku): print ("{} on hakemisto".format(haku)) elif os.path.isfile(haku): print ("{} on tiedosto".format(haku))

  37. VIRHEIDEN VÄISTELY • Yhdistämällä isdir()- ja isfile()-funktiot while-silmukkaan, ohjelmassa voi varmistaa että käsiteltäväksi poimitaan oikean tyyppisiä kohteita: haku = input("Syötä tiedoston nimi: ") while not(os.path.isfile(haku)) or not(os.path.exists(haku)): haku = input("{} ei ole tiedosto tai se puuttuu. Syötä nimi: ".format(haku))

  38. VIRHEIDEN VÄISTELY import os haku = input ("Minkä tiedoston haluat poistaa? ") while not(os.path.isfile(haku)) or not(os.path.exists(haku)): if not(os.path.isfile(haku)): haku = input("{} ei ole tiedosto. Syötä tiedostonimi: ".format(haku)) else: haku = input("Tiedostoa {} ei löydy. Syötä tiedostonimi: ".format(haku)) vahvistus = input("Tiedosto {} löytyi. Poistetaanko se (K/E)?".format(haku)).strip().lower() while vahvistus != "k" and vahvistus != "e": vahvistus = input("Haluatko poista tiedoston {} (K/E) ".format(haku)).strip().lower() if vahvistus == "k": os.remove(haku) print("Tiedosto {} poistettiin".format(haku)) else: print("Ohjelma päättyi. Tiedostoa {} ei poistettu.".format(haku))

  39. HARJOITUS: TIEDOSTOT • Kirjoita ohjelma, joka: • lukee tiedoston harkka1.txt sisällön • tulostaa sisällön rivi kerrallaan ruudulle

  40. HARJOITUS: TIEDOSTOT • Kirjoita ohjelma, joka: • lukee tiedoston harkka2.txt sisällön • järjestää sisällön aakkosjärjestykseen • tulostaa sisällön rivi kerrallaan ruudulle • poistaa lopuksi tiedoston harkka2.txt

  41. HARJOITUS: TIEDOSTOT • Kirjoita ToDo-listaohjelma, joka: • kysyy käyttäjältä viittä ToDo-listalle lisättävää asiaa • tallentaa listan tiedostoon harkka3.txt niin, että jokainen listan kohta on numeroitu ja omalla rivillään

  42. Tekninen viestintä12.02.2013 Tiedostojen tutkailu, osa 2

  43. TIEDOSTOJEN LUKEMINEN • Silmukoita ja ehtoja käyttämällä voit tarkastella useita tiedostoja kerrallaan • Ehdot auttavat kohdistamaan tiedonhaun tietyntyyppisiin tiedostoihin – apuna tässä voi myös käyttää os.path-moduulin splitext()-funktiota • splitext()-funktio pilkkoo tiedostonimen ja tiedostopäätteen listaksi; listan ensimmäinen jäsen on tiedostonimi ja toinen tiedostopääte

  44. TIEDOSTOJEN LUKEMINEN • Silmukoita ja ehtoja käyttämällä voit tarkastella useita tiedostoja kerrallaan • Ehdot auttavat kohdistamaan tiedonhaun tietyntyyppisiin tiedostoihin – apuna tässä voi myös käyttää os.path-moduulin splitext()-funktiota • splitext()-funktio pilkkoo tiedostonimen ja tiedostopäätteen listaksi; listan ensimmäinen jäsen on tiedostonimi ja toinen tiedostopääte

  45. TIEDOSTOJEN LUKEMINEN import os # Poimitaan tiedostolistaus listamuotoon hakemisto = os.listdir(".") # Käydään tiedostolistaus läpi tiedosto kerrallaan for tiedosto in hakemisto: # Tutkitaan millainen tiedosto on vuorossa tiedot = os.path.splitext(tiedosto) paate = tiedot[1] if paate == ".dita": ...

  46. TIEDOSTOJEN LUKEMINEN • Kun tiedostolistausta käydään läpi for-silmukassa, ja silmukasta löytyy tiedosto, jota halutaan tarkastella, voidaan tiedoston sisältöä lukea sisäkkäisessä for-silmukassa if paate == ".dita": lukuTiedosto = open(tiedosto) # Tulostetaan tiedosto rivi kerrallaan ruudulle for rivi in lukuTiedosto: print(rivi) lukuTiedosto.close()

  47. TIEDOSTOJEN LUKEMINEN import os hakemisto = os.listdir(".") for tiedosto in hakemisto: # Poimitaan tiedostopääte hiukan tehokkaammin paate = os.path.splitext(tiedosto)[1] # Tarkastellaan vain dita-tiedostoja if paate == ".dita": lukuTiedosto = open(tiedosto) # Tulostetaan tiedosto rivi kerrallaan ruudulle for rivi in lukuTiedosto: print(rivi) lukuTiedosto.close()

  48. TIEDOSTOJEN LUKEMINEN • Jos tarkasteluun halutaan poimia tiettyjä rivejä tekstitiedostosta, voi tarkastelun apuna käyttää tiedostojen käsittelyyn käytettävää readlines()-funktiota • readlines() lukee tiedoston kaikki rivit ja palauttaa ne lista-muodossa – nyt yksittäisiin riveihin pääsee kätevästi käsiksi

  49. TIEDOSTOJEN LUKEMINEN import os hakemisto = os.listdir(".") for tiedosto in hakemisto: paate = os.path.splitext(tiedosto)[1] if paate == ".dita": lukuTiedosto = open(tiedosto) # Luetaan rivit listamuotoon tiedostoRivit = lukuTiedosto.readlines() # Tulostetaan tiedoston kolmas rivi print (tiedostoRivit[2]) lukuTiedosto.close()

  50. MINIPROJEKTI: TEKSTITUTKAILIJA • Tekstitiedostoista voi silmukoiden avulla poimia perustietoja tutkittavaksi • Kuinka tekstitiedostosta flatland.txt saisi kaivettua seuraavat tiedot: • Tiedoston kokonaissanamäärä • Tiedoston lausemäärä • Keskimääräinen lausepituus • split(".")

More Related