12. nädala õpijuhis
Eesmärk
editNädala eesmärgiks on:
- Tutvuda uue andmetüübiga sõnastik (dictionary) ja mõista tema erinevust listidest ja ennikutest.
- Praktiseerida sõnastiku kasutamist.
Lugemiseks ja proovimiseks
edit- Loe materjali sõnastikust ja tema kasutamisest Sõnastik. Vaata näidet saksa numbrid.py. Proovi programmi muuta selliselt, et ta loeks algandmed tekstifailist, mis võiks väljanäha näiteks selline: saksa numbrid.txt Paaride lisamiseks sõnastikku ei ole vaja teha midagi muud, kui luua tühi sõnastik ja hakata paare võtme järgi lisama:
numbrid = {} numbrid["üks"] = "ein" # st siis nii indeksiks kui ka omistatavks väärtuseks on failist loetusd string.
- Edasi lahenda allpool olevaid ülesandeid
Ülesanded
editÜlesanne 1 Paunvere lapsed
editSee oli ülesanne kooliõpilaste informaatika olümpiaadil 2000 aastal.
Paunvere Perekonnaseisuamet tahab teha statistikat vastsündinutele pandavate nimede kohta. Kuna esialgu midagi paremat andmete säilitamiseks pähe ei tulnud, panid ametnikud lihtsalt kõik nimed ühte tekstifaili kirja. Nüüd oleks vaja selle faili põhjal leida, milliseid nimesid lastele pandi ja mitu korda iga nimi esines.
Sisend. Tekstifaili LAPSED.SIS esimesel real on laste arv N (1<=N<=100) ja järgmisel N real igaühel ühe lapse nimi, mis koosneb 1 kuni 20 suurest ladina tähest.
Väljund. Tekstifaili LAPSED.VAL väljastada täpselt üks rida iga nime kohta. Igale reale väljastada nimi ja selle järele tühikuga eraldatult selle nime sisendfailis esinemise kordade arv. Ridade järjekord failis pole oluline.
Näide: LAPSED.SIS LAPSED.VAL 7 ARNO 2 ARNO JOOSEP 1 JOOSEP TEELE 2 TEELE JORH 1 JORH AIN 1 TEELE ARNO AIN
Testid on olemas siin: paunvere.rar
Eelmine ülesanne oli väga sobiv sõnastiku abil lahendamiseks. Järgmised ülesanded niiväga seda võimalust ei paku, kuid sobivad harjutamiseks.
Ülesanne 2 Maatriki täitmine
editTäida NxN maatriks järgmiselt (näiteks kui N=4):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
NB! Mitte ühtegi lisamuutujat peale tsüklimuutujate kasutada ei tohi ;) Luua tuleks listidest koosnev list ja see ka kaunilt välja trükkida.
Ülesanne 3 Linnad
editJärgmised ülesanded kasutavad linnade-vaheliste kauguste tabelit:
Elva Haapsalu Kuressaare Narva Pärnu Rakvere Tallinn Tartu Valga Viljandi Võru Elva 0 267 308 211 156 152 216 27 60 70 75 Haapsalu 267 0 155 314 111 203 101 258 254 199 310 Kuressaare 308 155 0 429 152 315 216 330 295 249 351 Narva 211 314 429 0 299 116 212 184 271 265 252 Pärnu 156 111 152 299 0 183 129 178 143 97 199 Rakvere 152 203 313 116 183 0 99 126 212 151 193 Tallinn 216 101 216 212 129 99 0 189 252 161 257 Tartu 27 258 330 184 178 126 189 0 87 73 68 Valga 60 254 295 271 143 212 252 87 0 91 71 Viljandi 70 199 249 265 97 151 161 73 91 0 128 Võru 75 310 351 252 199 193 257 68 71 128 0
Andmed on kirjas failis linnad.txt Selle faili lugemiseks sobib näide linnade lugemine 1.py
Teistsuguse andmefaili ja vastava lugemise komplekti moodustavad: linnad rivis.txt ja linnade lugemine 2.py
Ülesanne 3.1 Leia tulemus
editLeia selle tabeli järgi:
- Milliste kahe tabelis oleva linna vahel on vahemaa kõige väiksem?
- Milliste kahe tabelis oleva linna vahel on vahemaa kõige suurem?
- Millisel tabelis oleval linnal asub 100 kilomeetri raadiuses kõige rohkem teisi linnu?
Ülesanne 3.2 Otsimine
editKasutaja sisestab kahe linna nime ja programm vastab, kui suur vahemaa neil on. Kui linna ei leita, siis antakse vastav veateade ja lubatakse linna nime uuesti sisestada.