Rodbina
Ogrevalna naloga: Brez potomcev
Napiši funkcijo
brez_potomca(oseba), ki vrne poljubno osebo iz rodbine podane osebe, ki nima nobenega otroka. Če pokličemobrez_potomca(jurij), lahko vrne Franca, Alenko, Petro ali Aleksandra. Če pokličemobrez_potomca(matjaž), mora vrniti Tadejo.Namig: to je lahko prav ta oseba. Če ni, pa naj vpraša kar prvega od svojih otrok.
Funkcije ni nujno potrebno napisati rekurzivno - vendar priporočam, da jo, saj vam bo to pomagalo pri prvi dodatni nalogi.
Namig pove vse. Samo tisto, kar piše, je potrebno ubesediti v Pythonu.
Če funkcije nočemo napisati rekurzivno, pa jo naredimo takole.
Obvezna naloga: Starost najmlajšega člana rodbine
Napišite funkcijo najmlajsi_let(oseba), ki vrne starost
najmlajšega člana rodbine podane osebe. Če pokličemo
najmlajsi(jurij), mora vrniti 5, saj ima Aleksander
5 let. Če pokličemo najmlajsi(adam), vrne 3, saj je toliko stara
Margareta.
Oseba najprej predpostavi, da je ona sama najmlajša v rodbini
(naj = oseba.starost. Nato vsakega otroka
(for otrok in oseba.otroci) vpraša, koliko je star najmlajši član
njegove rodbine (ta = najmlajsi_let(otrok)). Če je mlajši od
najmlajšega doslej, si to zapomni.
Dodatna naloga (lažja)
Dopolni funkcijo
brez_potomca. Imenujmo jobrez_potomcev(oseba), vrniti pa mora množico imen vseh oseb iz rodbine podane osebe, ki nimajo potomcev. Če pokličemobrez_potomcev(jurij), mora vrniti{"franc", "alenka", "petra", "aleksander"}. Če pokličemobrez_potomcev(matjaž), mora vrniti{"tadeja"}.Namig: ta naloga res ni težka, čeprav je dodatna. Če dotična oseba nima otrok, vrne množico z lastnim imenom. Sicer kliče otroke in vrne unijo množic, ki jo dobi od otrok.
Namig spet pove vse.
Dodatna naloga (malo težja)
Spremeni funkcijo
najmlajsi_let. Imenujmo jonajmlajsi(oseba), vrne pa naj ime najmlajšega člana rodbine.Namig: za začetek napiši raje funkcijo
najmlajsi0(oseba), ki naj vrne par (starost, ime) za najmlajšega člana rodbine. Funkcijanajmlajsinaj pokliče funkcijonamlajsi0in vrne drugi element iz para.
Kar namiguje namig, mora pogosto početi, ko programiramo rekurzivne funkcije. Problem je v tem, da pri klicu včasih potrebujemo malo več informacije, ko jih dobi prava, "zunanja" funkcija; zato naredimo neko dodatno funkcijo z dodatnimi argumenti. No, tule ne potrebujemo dodatnih argumentov, pač pa mora rekurzivna funkcija, ki jo kličemo, poleg imena (ki ga hočemo vrniti in ga potrebujemo zato) vračati tudi starost, saj je to tisto, kar opazujemo (primerjamo) ob rekurziji. Dodatno funkcijo torej potrebujemo zato, da vračamo dodatni rezultat; zunanja funkcija ga preprosto vrže stran.