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.
2. Maatriksi transponeerimine kõrvaldiagonaali järgi
Kirjuta funktsioon transponeeriK, mis võtab argumendina ette maatriksi ning tagastab selle transponeeritud kuju kõrvaldiagonaali järgi.
Transponeerimine tähendab, et maatriksi read muudetakse veergudeks ja veerud muudetakse ridadeks (https://et.wikipedia.org/wiki/Transponeeritud_maatriks). Tavaliselt transponeeritakse maatriksit peadiagonaali järgi, aga mõnes olukorras on seda vaja teha ka kõrvaldiagonaali järgi. Kõrvaldiagonaal on see diagonaal, mis ulatub ülemisest paremast nurgast alumisse vasakusse nurka.
Võib eeldada, et etteantud maatriks on transponeeritav, ehk siis kõik read on sama pikad ning kõik veerud on sama pikad.
>>> transponeeriK([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) [[9, 6, 3], [8, 5, 2], [7, 4, 1]]
>>> transponeeriK([[1, 2], [3, 4], [5, 6], [7, 8]]) [[8, 6, 4, 2], [7, 5, 3, 1]]
>>> transponeeriK([[4, 31, 67, 99]]) [[99], [67], [31], [4]]