12. nädala õpijuhis

From Wikiversity

< 12. nädala teemad

Eesmärk[edit]

Nädala eesmärgiks on:

  1. Tutvuda uue andmetüübiga sõnastik (dictionary) ja mõista tema erinevust listidest ja ennikutest.
  2. 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[edit]

See 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[edit]

Tä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[edit]

Jä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[edit]

Leia selle tabeli järgi:

  1. Milliste kahe tabelis oleva linna vahel on vahemaa kõige väiksem?
  2. Milliste kahe tabelis oleva linna vahel on vahemaa kõige suurem?
  3. Millisel tabelis oleval linnal asub 100 kilomeetri raadiuses kõige rohkem teisi linnu?

Ülesanne 3.2 Otsimine[edit]

Kasutaja 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.


< 12. nädala teemad