Aufgaben-Python/07_referenzen_und_speicher/musterloesung.py

85 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Kapitel 07: Referenzen, Speicher & Stammbäume – Musterlösung
============================================================
"""
from typing import Optional, List
class Person:
def __init__(self, name: str, geburtsjahr: int):
self.name: str = name
self.geburtsjahr: int = geburtsjahr
self.mutter: Optional["Person"] = None
self.vater: Optional["Person"] = None
self.kinder: List["Person"] = []
def mutter_setzen(self, mutter: "Person") -> None:
self.mutter = mutter
if self not in mutter.kinder:
mutter.kinder.append(self)
def vater_setzen(self, vater: "Person") -> None:
self.vater = vater
if self not in vater.kinder:
vater.kinder.append(self)
def geschwister(self) -> List["Person"]:
ergebnis = []
# Kinder der Mutter durchgehen
if self.mutter:
for kind in self.mutter.kinder:
if kind is not self and kind not in ergebnis:
ergebnis.append(kind)
# Kinder des Vaters durchgehen
if self.vater:
for kind in self.vater.kinder:
if kind is not self and kind not in ergebnis:
ergebnis.append(kind)
return ergebnis
def grosseltern(self) -> List["Person"]:
ergebnis = []
# Großeltern mütterlicherseits
if self.mutter:
if self.mutter.mutter and self.mutter.mutter not in ergebnis:
ergebnis.append(self.mutter.mutter)
if self.mutter.vater and self.mutter.vater not in ergebnis:
ergebnis.append(self.mutter.vater)
# Großeltern väterlicherseits
if self.vater:
if self.vater.mutter and self.vater.mutter not in ergebnis:
ergebnis.append(self.vater.mutter)
if self.vater.vater and self.vater.vater not in ergebnis:
ergebnis.append(self.vater.vater)
return ergebnis
def __str__(self) -> str:
return f"{self.name} (*{self.geburtsjahr})"
if __name__ == "__main__":
oma_anna = Person("Anna", 1955)
opa_karl = Person("Karl", 1952)
mama_susi = Person("Susi", 1980)
papa_tom = Person("Tom", 1978)
kind_mia = Person("Mia", 2008)
kind_leo = Person("Leo", 2011)
mama_susi.mutter_setzen(oma_anna)
mama_susi.vater_setzen(opa_karl)
kind_mia.mutter_setzen(mama_susi)
kind_mia.vater_setzen(papa_tom)
kind_leo.mutter_setzen(mama_susi)
kind_leo.vater_setzen(papa_tom)
print("Kind:", kind_mia)
print("Mamas Kinder:", [str(k) for k in mama_susi.kinder])
print("Mias Geschwister:", [str(g) for g in kind_mia.geschwister()])
print("Mias Großeltern:", [str(ge) for ge in kind_mia.grosseltern()])