Zadání 4. domácí úlohy

Deadline (čas posledního odevzdání): pátek 1. prosince 2017 ve 23:59

Vaše úlohy budu hodnotit v řádkovém režimu, nepoužívejte, prosím, proto konstrukty, které se s ním nesnesou.

Svůj program vtěsnejte do jednoho textového souboru a ten nazvěte 4.py a bez zipování či jiné komprese ho odevzdejte do příslušné Odevzdávárny. Jakožto poznámku uveďte na začátku svého programu svá odháčárkovaná jméno a příjmení.

Podle pokynů páně docentových Pelánkových máte použít nejméně dvě třídy (class) a rekursi. Tady to jsou třída Member_of_dynasty s rodem, jménem, roky narození, úmrtí, nastoupení vlády a jejím skončením a syny a třída Dynasty se jménem dynastie a jejími členy.

Ve vstupních souborech jsou řádky dvojího druhu: oba se jménem rodu, vlastním jménem a výše zmíněnými roky. Pokud člen dynastie vládu nikdy nenastoupil, jsou jakožto údaje jejího začátku a konce uvedeny nuly (0). A jiné, které ještě za „symbolem” „–>” obsahují seznam synů. (Náš příklad je z temného středověku, kdy vládnout mohli jen muži a to nejstarší ... )

Funkce plural, kterou máte také napsat, má fungovat jen na jménech dynastií, jež jsou ve vstupních souborech.

V proměnné dynasties nejsou v mém programu použity instance třídy Dynasty. Ta je použita jakožto výstup select_to_dynasty

Rekursi použijte pro vypis „genealogického stromu” (print_dynasties) a pro výpočet počtu potomků count_offspring

„Hlavní” program či funkce je:
all_members_of_dynasties, dynasties = read_data("kingsNF.txt")
print_dynasties(dynasties)
print()
print("--------------")
print("Number of offsprings of Habsburk Ferdinand is", count_offspring(all_members_of_dynasties["Habsburk Ferdinand"]))
print("--------------")
print("Those of shortest reign's are")
for mmbr in shortest_reign(all_members_of_dynasties):
    print("  ", mmbr)
print("--------------")
s = select_to_dynasty("Premyslovec", all_members_of_dynasties)
print(plural(s.get_name()))
print_all_members(s)
print("--------------")
print()
all_members_of_dynasties, dynasties = read_data("kingsR.txt")
print_dynasties(dynasties)

Vaším úkolem tedy je: napsat funkce s oněmi výše zmíněnými třídami a rekursemi, aby na dodaných vstupech byl výstup:
Premyslovci
Premysl Otakar *1167 +1230 reign 1198 - 1230
    Vaclav *1205 +1253 reign 1230 - 1253
        Vladislav Cesky *1227 +1247
        Premysl Otakar II. *1233 +1278 reign 1253 - 1278
            Vaclav II. *1271 +1305 reign 1278 - 1305
                Vaclav III. *1289 +1306 reign 1305 - 1306
            Mikulas
    Vladislav *1207 +1227
    Premysl *1209 +1239

Jagellonci
Vladislav *1456 +1516 reign 1471 - 1516
    Ludvik *1506 +1526 reign 1516 - 1526

Lucemburci
Jan *1296 +1346 reign 1310 - 1346
    Karel *1316 +1378 reign 1346 - 1378
        Vaclav *1361 +1419 reign 1363 - 1419
        Zikmund *1368 +1437 reign 1436 - 1437
    Jan Jindrich *1322 +1375
        Jost *1351 +1411
        Jan Sobeslav
        Prokop

Habsburci
Ferdinand *1503 +1564 reign 1526 - 1564
    Maxmilian *1527 +1576 reign 1562 - 1576
        Rudolf *1552 +1612 reign 1576 - 1611
        Matyas *1557 +1619 reign 1611 - 1619
    Ferdinand Tyrolsky
    Karel Styrsky *1540 +1590
        Ferdinand Styrsky *1578 +1637 reign 1619 - 1637
            Ferdinand III. *1608 +1657 reign 1637 - 1657
                Ferdinand IV.
                Filip August
                Maxmilian Tomas
                Leopold I. *1640 +1705 reign 1657 - 1705
                    Josef *1678 +1711 reign 1705 - 1711
                    Karel VI. *1685 +1740 reign 1705 - 1740
            Leopold Vilem
        Maxmilian Arnost
        Leopold
        Karel


--------------
Number of offsprings of Habsburk Ferdinand is 17
--------------
Those of shortest reign are
   Zikmund *1368 +1437 reign 1436 - 1437
   Vaclav III. *1289 +1306 reign 1305 - 1306
--------------
Premyslovci
     Premysl Otakar II.
     Vaclav II. *1271 +1305 reign 1278 - 1305
     Vladislav Cesky *1227 +1247
     Vaclav *1205 +1253 reign 1230 - 1253
     Vaclav III. *1289 +1306 reign 1305 - 1306
     Premysl *1209 +1239
     Mikulas
     Vladislav *1207 +1227
     Premysl Otakar *1233 +1278 reign 1253 - 1278
--------------

Lucemburci
Jan *1296 +1346 reign 1310 - 1346
    Karel IV. *1316 +1378 reign 1346 - 1378
        Vaclav IV.
        Zikmund
    Jan Jindrich

V kódu programu jsou nápovědy, jak jsem to řešil já.
Upozornění I.: ve vstupním souboru si můžete všimnout, že některé osoby mají stejné jméno a jakožto synové nemají žádné další identifikace v rocích. Ti stejného jména jsou ale z různých rodů.(Synové po otcích dědí příslušnost k rodu.)
Upozornění II.: ve vstupním souboru jsou uvedeny – jakožto synové – osoby, které „dostanou” své údaje až později (některé ale ne).
Upozornění III.: „nedodané” údaje „se” netisknou.