14. kodutöö
1. Rekursiivne absoluutväärtus
Kirjuta rekursiivne funktsioon rek_abs, mis võtab argumentideks järjendi, mille elementideks võivad olla arvud ja/või järjendid. Igas alamjärjendis on jällegi arvud ja/või järjendid jne. Funktsioon peab tagastama uue sama kujuga andmestruktuuri, kus kõik arvud on asendatud nende absoluutväärtusega. Argumendiks antud järjendit ega ühtegi alamjärjendit muuta ei tohi.
Näide funktsiooni kasutamisest:
>>> rek_abs([2, -6, [8, -12, -12, [4, [-6], -3]], 7, [3.55, -3.55]]) [2, 6, [8, 12, 12, [4, [6], 3]], 7, [3.55, 3.55]] >>> rek_abs([]) []
VIHJE!
>>> isinstance([1, 2, 3], list) True >>> isinstance(435, list) False
2. Väljasta liin
Kirjuta rekursiivne funktsioon väljasta_liin, mis võtab argumentideks eellase nime, järglase nime ja sugupuu sõnastiku ning väljastab ekraanile põlvnemiste ahela eellasest järglaseni, kui selline ahel leidub. Kui ahelat ei leidu, siis ei tohiks funktsioon midagi välja printida. Lisaks peab funktsioon tagastama tõeväärtuse True või False vastavalt sellele, kas liin leidub või ei. Sõnastikus on võtmeks sõnena nimi ning väärtuseks ennikuna (või järjendina) isa nimi indeksil 0 ja ema nimi indeksil 1.
Näide programmi tööst (sõnastiku väljund on ilustatud):
>>> sõnastik { 'Kalle': ('Teet', 'Maris'), 'Maris': ('Konstantin', 'Mari'), 'Rita': ('Teet', 'Maris'), 'Siim': ('Teet', 'Maris'), 'Mari': ('Karl', 'Leeni'), 'Teet': ('Joosep', 'Adele'), 'Adele': ('Johannes', 'Leida'), 'Konstantin': ('Viktor', 'Jelena'), 'Joosep': ('August', 'Emma'), 'Viktor': ('Nikolai', 'Maria') } >>> print("Kas liin leidub?", väljasta_liin('Leida', 'Kalle', sõnastik)) Leida Adele Teet Kalle Kas liin leidub? True >>> print("Kas liin leidub?", väljasta_liin('Mari', 'Adele', sõnastik)) Kas liin leidub? False