it-praxisportal/07_referenzen_und_speicher/aufgabe.py

93 lines
3.9 KiB
Python

"""
Kapitel 07: Referenzen, Speicher & Stammbäume 🧠🌳
=================================================
Aufgabe: Erstelle eine Stammbaum-Klasse 'Person'.
Jede Person kann Verweise (Referenzen) auf Mutter, Vater und Kinder enthalten.
"""
from typing import Optional, List
class Person:
# ==========================================================================
# TODO 1: Konstruktor __init__
# Parameter: name (str), geburtsjahr (int)
# Attribute:
# - self.name: str
# - self.geburtsjahr: int
# - self.mutter: Person | None (Startwert: None)
# - self.vater: Person | None (Startwert: None)
# - self.kinder: list[Person] (Startwert: leere Liste [])
# ==========================================================================
def __init__(self, name: str, geburtsjahr: int):
pass
# ==========================================================================
# TODO 2: Methode mutter_setzen(self, mutter: 'Person') -> None
# 1. Setze self.mutter = mutter
# 2. Füge self zur Liste mutter.kinder hinzu (falls self noch nicht drin ist)
# ==========================================================================
def mutter_setzen(self, mutter: "Person") -> None:
pass
# ==========================================================================
# TODO 3: Methode vater_setzen(self, vater: 'Person') -> None
# 1. Setze self.vater = vater
# 2. Füge self zur Liste vater.kinder hinzu (falls self noch nicht drin ist)
# ==========================================================================
def vater_setzen(self, vater: "Person") -> None:
pass
# ==========================================================================
# TODO 4: Methode geschwister(self) -> list['Person']
# Gibt eine Liste aller Personen zurück, die dieselbe Mutter ODER denselben
# Vater haben wie self.
# WICHTIG:
# - self darf NICHT in der eigenen Geschwisterliste sein!
# - Keine Person darf doppelt in der Rückgabeliste sein.
# ==========================================================================
def geschwister(self) -> List["Person"]:
pass
# ==========================================================================
# TODO 5: Methode grosseltern(self) -> list['Person']
# Gibt eine Liste aller bekannten Großeltern zurück:
# (Mutter der Mutter, Vater der Mutter, Mutter des Vaters, Vater des Vaters)
# Nur Großeltern hinzufügen, die nicht None sind!
# ==========================================================================
def grosseltern(self) -> List["Person"]:
pass
# ==========================================================================
# TODO 6: Dunder-Methode __str__(self) -> str
# Gibt einen String im Format: "Name (*Geburtsjahr)" zurück.
# Beispiel: "Mia (*2008)"
# ==========================================================================
def __str__(self) -> str:
pass
# ==============================================================================
# Kleiner Test zum Ausprobieren im Terminal:
# (python3 aufgabe.py)
# ==============================================================================
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)
# Verknüpfungen herstellen
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()])