11. kodutöö
1. Lapsed ja vanemad
Failis lapsed.txt on igal real vanema isikukood, tühik ja lapse isikukood. Failis nimed.txt on igal real ühe inimese isikukood, tühik ja tema nimi. Võib eeldada, et korduvaid nimesid failis ei esine. Samuti võib eeldada, et iga failis lapsed.txt oleva isikukoodi jaoks on failis nimed.txt välja toodud vastav nimi.
Kirjuta programm, mis väljastab ekraanile iga lapse kohta ühe rea: nimi, koolon, tühik ning seejärel koma ja tühikuga eraldatuna ema ja isa nimi. Kui teada on ainult üks vanem, siis väljastada ainult see. Näiteks antud failide korral peaksid ekraanile ilmuma järgnevad read (laste ega nende vanemate järjekord pole tähtis):
Robert Peedumets: Madli Peedumets, Peeter Peedumets Maria Peedumets: Madli Peedumets, Peeter Peedumets Liisa-Maria Jaaniste: Kadri Kalkun Peeter Peedumets: Karl Peedumets
Põhitöö tuleks delegeerida funktsioonile seosta_lapsed_ja_vanemad, mille parameetriteks on laste faili nimi ja nimede faili nimi ning mis tagastab sõnastiku, kus kirje võtmeks on lapse nimi ja väärtuseks tema vanemate nimede hulk.
Näiteks antud failide korral peaks tulemus olema järgmine:
>>> seosta_lapsed_ja_vanemad("lapsed.txt", "nimed.txt") {'Robert Peedumets': {'Madli Peedumets', 'Peeter Peedumets'}, 'Maria Peedumets': {'Madli Peedumets', 'Peeter Peedumets'}, 'Liisa-Maria Jaaniste': {'Kadri Kalkun'}, 'Peeter Peedumets': {'Karl Peedumets'}}
Automaatkontroll. Programm ei tohiks kasutajalt midagi küsida. Andmefailide nimed lapsed.txt ja nimed.txt peaksid olema kirjutatud programmi sisse, st põhiprogramm pöördub nendega funktsiooni seosta_lapsed_ja_vanemad poole.
Kui oled juba hulk aega proovinud ülesannet iseseisvalt lahendada ja see ikka ei õnnestu, siis võib-olla saad abi murelahendajalt
. Püütud on selgitada tüüpilisemaid probleemseid selgitada ja anda vihjeid.
2. Noolemängu punktid
Failis tulemused.txt on kirjas Mihkli noolemängu tulemused, kus iga rida tähistab ühte vooru ning reas olevad numbrid tähistavad noolega tabatud punkte. Tulemuste eraldajaks on semikoolon ja igas reas on samapalju arve. Voorude ning voorus tehtud visete arv pole ette teada ning programm peab töötama ka rohkemate visete või voorude korral.
Näide faili tulemused.txt võimalikust sisust
1. voor;5;2;3;4 2. voor;3;4;2;7 3. voor;2;7;9;9
Koosta funktsioon loe_failist, mis saab argumendiks failinime ja tagastab sõnastiku, kus võtmeks on vooru nimi sõnena ja väärtusteks on vastavates voorudes saadud punktid järjendis.
Näide funktsiooni loe_failist tööst eelneva failiga:
>>> loe_failist("tulemused.txt") {'1. voor': [5, 2, 3, 4], '2. voor': [3, 4, 2, 7], '3. voor': [2, 7, 9, 9]}
Koosta funktsioon leia_keskmine, mis võtab argumendiks sõnastiku, mille võtmeteks on voorude nimed sõnena ja väärtusteks on vastavates voorudes saadud punktid järjendis. Funktsioon leia_keskmine tagastab kõikide voorude keskmise tulemuse ühe komakoha täpsusega.
Näide funktsiooni leia_keskmine tööst:
>>> leia_keskmine({'1. voor': [5, 2, 3, 4], '2. voor': [3, 4, 2, 7], '3. voor': [2, 7, 9, 9]}) 4.8
Kirjuta põhiprogramm, mis küsib kasutajalt failinime, loeb andmed failist sõnastikku kasutades funktsiooni loe_failist ning kuvab ekraanile kõikide voorude keskmised tulemused. Päras seda programm leiab kõikide voorude keskmise tulemuse kasutades funktsiooni leia_keskmine ja kuvab selle ekraanile.
Näide põhiprogrammi tööst:
Sisesta failinimi: tulemused.txt Voorude keskmised tulemused on: 3.5 4.0 6.8 Kõikide voorude keskmine tulemus on: 4.8
Esita programmid
Esita ülesannete lahendused Moodle'i kaudu failidena kodu1.py ja kodu2.py.