from rich import get_console from rich.table import Table def normalisiert(gesamt: list[int], anzahl_straftäter: list[int]) -> list[float]: """ Berechnet für jede Bevölkerungsgruppe die normierte Straftäterrate. gesamt: Gesamtgröße der jeweiligen Bevölkerungsgruppe. anzahl_straftäter: Anzahl der Straftäter je Gruppe. Eine Liste mit den normierten Raten (0.0 bis 1.0). """ if len(anzahl_straftäter) != len(gesamt): raise ValueError("Beide Listen müssen gleich lang sein.") ergebnis = [] for straftäter, bevölkerung in zip(anzahl_straftäter, gesamt): if bevölkerung <= 0: raise ValueError("Alle Bevölkerungsgrößen müssen größer als 0 sein.") ergebnis.append(straftäter / bevölkerung) return ergebnis def zeige_tabelle(farben: list[str], gesamt: list[int], anzahl_straftäter: list[int]): ergebnis = normalisiert(gesamt, anzahl_straftäter) summe = sum(gesamt) console = get_console() table = Table(title="Normalisierte Kriminalitätsraten") for col in ( "Farbe", "Population", "Strafäter", "Rel. (gesamt)", "Rel. (normalisiert)", ): table.add_column(col) for farbe, anzahl, straftäter, rel_norm in zip( farben, gesamt, anzahl_straftäter, ergebnis ): rel_gesamt = straftäter / summe table.add_row( f"{farbe.title()} Schafe", f"{anzahl:>10}", f"{straftäter:>10}", f"{rel_gesamt:>7.1%}", f"{rel_norm:>7.1%}", ) console.print(table) schwarze_schafe = 90 weiße_schafe = 10 straftaten_schwarz = 5 straftaten_weiß = 5 farben = ["schwarze", "weiße"] gesamt = [schwarze_schafe, weiße_schafe] anzahl_straftäter = [straftaten_schwarz, straftaten_weiß] zeige_tabelle(farben, gesamt, anzahl_straftäter)