Ohjelmoinnin peruskurssi Y1

Samankaltaiset tiedostot
Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Ohjelmoinnin perusteet Pythonilla. Teemu Sirkiä, 2015

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Ohjelmoinnin perusteet Y Python

Merkkijonon tutkiminen matches-metodilla

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Python-ohjelmointi Harjoitus 2

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Ohjelmoinnin perusteet Y Python

Luento 5. Timo Savola. 28. huhtikuuta 2006

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin jatkokurssi, kurssikoe

Johdatus Ohjelmointiin

Algoritmit 2. Luento 3 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

ITKP102 Ohjelmointi 1 (6 op)

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

T Ohjelmoinnin perusteet Y (Python). Tentti

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

Java-kielen perusteita

Ohjelmoinnin perusteet Y Python

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Transkriptio:

Ohjelmoinnin peruskurssi Y1 CSE-A1111 12.10.2016 CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 1 / 31

Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute. Tätä kautta on mahdollisuus antaa nimettömänä palautetta luennosta. Jos jokin asia on jäänyt palautteen perusteella epäselväksi, palataan siihen mahdollisuuksien mukaan seuraavalla luennolla. CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 2 / 31

Uusi versio Mastery Grids -järjestelmästä Mastery Grids -järjestelmästä (vapaaehtoiset lisätehtävät) on viime viikolla asennettu uusi versio, jossa on näytetty tarkemmin, mitä käsitteitä (concept) kuhunkin aiheeseen (topic) kuuluu. Järjestelmä näyttää myös, miten pitkälle opiskelija on edistynyt eri käsitteisiin liittyvissä tehtävissä. Linkki vapaaehtoisiin lisätehtäviin on Goblinin pääsivulla. MyCourses-sivulla harjoitustehtävät on linkki videoon, jossa esitellään Mastery Grids -järjestelmää. Vapaaehtoisista lisätehtävistä voi saada 200 harjoitustehtäväpistettä, ks. tarkemmin MyCoursesista sivulta Harjoitustehtävät. CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 3 / 31

Oppimistavoitteet: tämän luennon jälkeen Tunnet lisää erilaisia tapoja käyttää listoja Python-ohjelmissa. Tunnet erilaisia tapoja käsitellä merkkijonoja. Osaat esimerkiksi vertailla merkkijonojen sisältöjä. Osaat tehdä ohjelmia, jotka käsittelevät tehokkaasti tilanteita, joissa tarvitaan avain arvo-pareja (esim. opiskelijarekisteri, puhelinluettelo) Lisää näihin aiheisiin liittyviä asioita esitellään opetusmonisteessa. Nämä luentokalvot eivät sisällä läheskään kaikkia kurssin asioita. CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 4 / 31

Alilistat Listasta voi ottaa helposti alilistoja (alkuperäisen listan osia): >>> lista = [2, 4, 6, 8, 10, 12, 14, 16] >>> alilista = lista[2:5] >>> print(alilista) [6, 8, 10] Ensimmäinen tai viimeinen indeksi voidaan myös jättää merkitsemättä: >>> lista[:5] [2, 4, 6, 8, 10] >>> lista[5:] [12, 14, 16] Negatiiviset indeksit tarkoittavat alkioita listan lopusta lähtien: >>> lista[:-1] [2, 4, 6, 8, 10, 12, 14] CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 5 / 31

Listan järjestäminen ja kääntäminen Metodi sort järjestää listan: >>> lista = [4, 6, 10, 16, 14, 2, -3, -5] >>> lista.sort() >>> print(lista) [-5, -3, 2, 4, 6, 10, 14, 16] Metodi reverse kääntää listan järjestyksen päinvastaiseksi. >>> lista.reverse() >>> print(lista) [16, 14, 10, 6, 4, 2, -3, -5] Funktio sorted tekee listasta kopion ja järjestää tämän kopion. Alkuperäinen lista jää entiselleen: >>> lista2 = sorted(lista) >>> print(lista2) [-5, -3, 2, 4, 6, 10, 14, 16] >>> print(lista) [16, 14, 10, 6, 4, 2, -3, -5] CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 6 / 31

Listojen yhdistäminen Kaksi listaa voidaan yhdistää käyttämällä operaattoria +: >>> lista1 = [1, 2, 3] >>> lista2 = [4, 5, 6] >>> yhteislista = lista1 + lista2 >>> print(yhteislista) [1, 2, 3, 4, 5, 6] CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 7 / 31

Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja erilaisia tunnuksia. Merkkijonon tyyppi Pythonissa on str. Yksittäisiä merkkejä varten ei ole omaa tyyppiä, vaan ne ovat yhden merkin pituisia merkkijonoja. Merkkijono esitetään yksin- tai kaksinkertaisten lainausmerkkien avulla. mjono = appelsiini mjono = "appelsiini" Useammalle riville jatkuva merkkijono kirjoitetaan kolmen lainausmerkin sisään. pitkajono = """Tama merkkijono sisaltaa useamman kuin yhden rivin""" CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 8 / 31

Merkkijonojen käsittely Merkkijonoja voidaan käsitellä monessa tapauksessa samalla tavalla kuin listoja, esim. >>> sana = "sitruuna" >>> print(sana[3]) r Olennainen ero: merkkijonon sisältöä ei voi muuttaa sen jälkeen, kun merkkijono on luotu, esim. >>> sana[3] = a Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: str object does not support item assignment CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 9 / 31

Merkkijonon läpikäynti Merkkijonon merkit voi käydä läpi for-käskyn avulla samalla tavalla kuin listan alkiot: >>> mjono = "matti" >>> for merkki in mjono:... print(merkki)... m a t t i CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 10 / 31

Sijoitus merkkijonomuuttujaan Merkkijonon sisältöä ei voi muuttaa sen jälkeen, kun merkkijono on luotu. Voidaan kuitenkin tehdä uusi merkkijono ja sijoittaa se arvoksi vanhalle muuttujalle: >>> mjono = "mansikka" >>> print(mjono) mansikka >>> mjono = "mustikka" >>> print(mjono) mustikka "mansikka" mjono CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 11 / 31

Sijoitus merkkijonomuuttujaan Merkkijonon sisältöä ei voi muuttaa sen jälkeen, kun merkkijono on luotu. Voidaan kuitenkin tehdä uusi merkkijono ja sijoittaa se arvoksi vanhalle muuttujalle: >>> mjono = "mansikka" >>> print(mjono) mansikka >>> mjono = "mustikka" >>> print(mjono) mustikka "mansikka" mjono "mustikka" CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 11 / 31

Uusi merkkijono vanhan avulla Uusi merkkijono voi kuitenkin riippua jotenkin vanhasta merkkijonosta. Metodi upper luo uuden merkkijonon, jossa kaikki vanhan merkkijonon pienet kirjaimet on muutettu isoiksi: >>> mjono = "Mustikka" >>> mjono = mjono.upper() >>> print(mjono) MUSTIKKA Metodi lower luo uuden merkkijonon, jossa kaikki vanhan merkkijonon isot kirjaimet on muutettu pieniksi: >>> print(mjono) MUSTIKKA >>> mjono = mjono.lower() >>> print(mjono) mustikka CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 12 / 31

Merkkijonojen liittämiset Useampi merkkijono voidaan liittää peräkkäin +-operaattorilla. >>> etunimi = "Matti" >>> sukunimi = "Virtanen" >>> kokonimi = etunimi + " " + sukunimi >>> print(kokonimi) Matti Virtanen Jos merkkijonoon halutaan liittää muuntyyppisten muuttujien arvoja, pitää ensin suorittaa tyypinmuunnos str-operaattorilla. >>> tunteja = 50 >>> tuntip = 12.5 >>> palkka = tunteja * tuntip >>> tulosrivi = str(tunteja) + " h * " + str(tuntip) + \... " eur / h = " + str(palkka) >>> print(tulosrivi) 50 h * 12.5 eur / h = 625.0 CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 13 / 31

Merkkijonojen monistaminen Operaattorin * avulla voidaan tehdä merkkijono, joka sisältää pienemmän merkkijonon monta kertaa. Rivinvaihtomerkin saa tarvittaessa mukaan lisäämällä merkkijonoon erikoismerkin "\n": >>> merkit = "*!*" >>> rivi = 5 * merkit >>> print(rivi) *!**!**!**!**!* >>> rivit = 3 * (rivi + "\n") >>> print(rivit) *!**!**!**!**!* *!**!**!**!**!* *!**!**!**!**!* CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 14 / 31

Erikoismerkkejä Merkkijonoihin on mahdollista liittää erikoismerkkejä (engl. escape characters), jotka aiheuttavat tulostuksessa esimerkiksi rivinvaihdon tai kursorin siirron seuraavaan tabulointikohtaan. Tärkeimpiä erikoismerkkejä: \n rivinvaihto \t tabulaattori \ yksinkertainen lainausmerkki \" kaksinkertainen lainausmerkki \\ yksi kenoviiva CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 15 / 31

Tyhjien merkkien poisto syötteen alusta ja lopusta Usein halutaan poistaa käyttäjän syötteestä käyttäjän mahdollisesti vahingossa alkuun tai loppuun kirjoittamat ns. tyhjät merkit (välilyönnit, tabuloinnit, rivinvaihdot). Tämä on helppo tehdä metodin strip avulla: >>> syote = input("anna tekstia.\n") Anna tekstia. kirjoitetaan jotain >>> print("*{:s}*".format(syote)) * kirjoitetaan jotain * >>> muutettu_syote = syote.strip() >>> print("*{:s}*".format(muutettu_syote)) *kirjoitetaan jotain* Jos tyhjät merkit halutaan poistaan vain merkkijonon alusta tai lopusta, voidaan käyttää metodeita lstrip tai rstrip. CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 16 / 31

Merkkijonon jakaminen Monesti on tarve jakaa merkkijono osiin jonkun merkin (esimerkiksi välilyönnin kohdalta). Esimerkki: halutaan erottaa samalla rivillä annettu etunimi ja sukunimi tai sana ja sen käännös toiselle kielelle toisistaan. Merkkijono voidaan jakaa metodilla split. Se palauttaa listan, joka sisältää jaetun merkkijonon eri osat. Oletusarvoisesti split-metodi jakaa merkkijonon välilyönnin kohdalta, mutta metodille voidaan antaa parametrina joku muu merkki, jonka kohdasta jako tehdään. Jaossa käytetty merkki ei tule mukaan mihinkään osaan. CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 17 / 31

Merkkijonon jakaminen, esimerkkejä >>> teksti = "Pitka teksti, joka sisaltaa monta eri sanaa." >>> osat = teksti.split() >>> print(osat) [ Pitka, teksti,, joka, sisaltaa, monta, eri, sanaa. ] >>> sanarivi = "kirja=book" >>> kaannokset = sanarivi.split("=") >>> print(kaannokset) [ kirja, book ] CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 18 / 31

Välitehtävä Käyttäjältä luetaan merkkijono, joka sisältää yhden kilpailijan nimen sekä tämän kilpailijan pisteet kahdelta eri kilpailukierrokselta. Eri tiedot on erotettu toisistaan kauttaviivalla /. Kirjoita ohjelman osa, joka laskee kilpailijan yhteispisteet (molempien kierrosten pisteet yhteensä). Tämän jälkeen ohjelman pitää tulostaa kilpailijan nimi ja hänen yhteispisteensä. Esimerkki käyttäjän antamasta rivistä: Teemu Teekkari/25/15 CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 19 / 31

Merkkijonojen vertailu Merkkijonojen sisältöjä voi verrata toisiinsa vertailuoperaattoreilla ==,!=, <=, >=, < ja >. Kun katsotaan, onko toinen merkkijono suurempi kuin toinen, verrataan merkkejä keskenään merkkijonojen alusta lähtien. Järjestyksen määrää kirjainten arvo käytetyssä merkkikoodausjärjestelmässä mitä lukuarvoa kukin kirjain vastaa. Käytännössä koodit noudattavat muuten aakkosjärjestystä, mutta isot kirjaimet ovat ennen pieniä ja skandinaaviset aakkoset eivät ole keskenään oikeassa järjestyksessä. CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 20 / 31

Esimerkkejä merkkijonojen vertailuista >>> nimi1 = "matti" >>> nimi2 = "teppo" >>> nimi1 == nimi2 False >>> >>> nimi1 < nimi2 True >>> >>> nimi3 = "Teppo" >>> nimi2 == nimi3 False >>> >>> nimi3 < nimi2 True CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 21 / 31

Esimerkkejä merkkijonojen vertailuista, jatkoa >>> nimi1 = "matti" >>> nimi4 = "matilda" >>> nimi1 < nimi4 False CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 22 / 31

Sanakirja Monissa sovelluksissa on tallennettava rakenteeseen avain arvo-pareja. Myöhemmin rakenteesta halutaan etsiä tiettyyn avaimeen liittyyvää arvoa. Esimerkkejä: puhelinluettelo, opiskelijarekisteri, yrityksen asiakasrekisteri, autorekisteri. Halutaan, että tehokkaan hakemisen lisäksi rakenteeseen pystyy myös helposti lisäämään uusia avain arvo-pareja sekä poistamaan pareja. Lisäksi avaimeen liittyvää arvoa voidaan muuttaa. Yksinkertainen ratkaisu: käytetään listaa, jonka alkoina on avain arvo-pareja. Ongelmia: Hidas haku Jos hakua nopeutetaan pitämällä avaimet järjestyksessä, lisäys ja poisto hankaloituvat. Pythonissa on valmis rakenne, sanakirja (engl. dictionary), jossa sekä haut, lisäykset että poistot pystytään tekemään tehokkaasti. CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 23 / 31

Sanakirjan luonti ja käyttö Tyhjän sanakirjan voi luoda aaltosulkujen avulla: >>> puh_luettelo = {} Sanakirjaa luodessa voi samalla jo antaa siihen liitettäviä avain arvo-pareja: >>> puhelinluettelo = {"Teekkari Teemu" : "050-12345", \... "Fyysikko Tiina" : "045-234567", "Kemisti Kalle" : \... "040-765432"} Haluttuun avaimeen liittyvän arvon saa selville ilmauksella sanakirja[avain], esimerkiksi >>> print(puhelinluettelo["fyysikko Tiina"]) 045-234567 CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 24 / 31

Sanakirja: avaimen haku ja olemassaolo Edellisen kalvon hakutapa johtaa kuitenkin ohjelman kaatumiseen, jos haettua avainta ei löydy sanakirjasta: >>> print(puhelinluettelo["virtanen Maija"]) Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: Virtanen Maija Operaattorin in avulla voi tutkia, onko haettava avain sanakirjassa: >>> nimi = "Virtanen Maija" >>> if nimi in puhelinluettelo:... print(puhelinluettelo[nimi])... else:... print("nimea ei loydy luettelosta")... Nimea ei loydy luettelosta CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 25 / 31

Sanakirja: avainten lisääminen ja arvon muuttaminen Sijoituskäskyn avulla sanakirjaan voi lisätä uusia avain arvo-pareja ja muuttaa sanakirjassa jo oleviin avaimiin liittyviä arvoja. >>> puhelinluettelo["rakentaja Niina"] = "0400-123" >>> puhelinluettelo["kemisti Kalle"] = "041-56789" >>> print(puhelinluettelo) { Kemisti Kalle : 041-56789, Fyysikko Tiina : 045-234567, Teekkari Teemu : 050-12345, Rakentaja Niina : 0400-123 } CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 26 / 31

Sanakirja: avainten läpikäynti Sanakirjan avaimet voi käydä läpi for-käskyn avulla. >>> for nimi in puhelinluettelo:... print(nimi)... Kemisti Kalle Fyysikko Tiina Teekkari Teemu Rakentaja Niina >>> for nimi in puhelinluettelo:... print("{:16s} {:12s}".format(... nimi, puhelinluettelo[nimi]))... Kemisti Kalle 041-56789 Fyysikko Tiina 045-234567 Teekkari Teemu 050-12345 Rakentaja Niina 0400-123 CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 27 / 31

Sanakirja: avaimen poistaminen Sanakirjasta voi poistaa avaimen ja siihen liittyvän arvon del-operaattorilla: >>> del puhelinluettelo["kemisti Kalle"] >>> print(puhelinluettelo) { Fyysikko Tiina : 045-234567, Teekkari Teemu : 050-12345, Rakentaja Niina : 0400-123 } CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 28 / 31

Esimerkki: puhelinluettelo Seuraavassa esimerkkiohjelmassa käyttäjä syöttää ensin haluamansa määrän nimiä ja puhelinnumeroita sanakirjarakenteen avulla toteutettuun puhelinluetteloon. Tämän jälkeen käyttäjä voi hakea luettelosta viiteen nimeen liittyvät puhelinnumerot. Käytännössä puhelinluettelon tiedot kannattaisi lukea tiedostosta, niin ne olisivat käytössä ohjelman suorituskerrasta toiseen. Opetusmonisteessa on vähän laajempi versio samasta esimerkistä. CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 29 / 31

Puhelinluettelo, koodi def lue_puhelinnumerot(): print("anna lisattavat nimet ja numerot.") print("nimi ja puhelinnumero samalla rivilla,") print("valissa kaksoispiste.") print("lopeta tyhjalla rivilla.") puhelinluettelo = {} rivi = input() while len(rivi) > 0: tiedot = rivi.split(":") nimi = tiedot[0] numero = tiedot[1] puhelinluettelo[nimi] = numero rivi = input() return puhelinluettelo CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 30 / 31

Puhelinluettelo, koodi jatkuu def etsi_numero(puhelintiedot): etsitty = input("kenen numero haetaan? ") if etsitty in puhelintiedot: print("numero on", puhelintiedot[etsitty]) else: print("nimea ei loydy luettelosta.") def main(): luettelo = lue_puhelinnumerot() for i in range(5): etsi_numero(luettelo) main() CSE-A1111 Ohjelmoinnin peruskurssi Y1 12.10.2016 31 / 31