Tracks
/
Python
Python
/
Übungen
/
Verwandtschaftsabstand
Verwandtschaftsabstand

Verwandtschaftsabstand

Mittel

Einführung

Du hast den Auftrag, Noble Knots zu entwickeln, die angesagteste neue Dating-App für den Adel! Nach Jahrhunderten königlicher Heiratspolitik ist die Sache … kompliziert geworden. Um Hoppla-wir-sind-Zwillinge-Situationen zu vermeiden, sollst du ein System bauen, das prüft, wie eng zwei Personen miteinander verwandt sind.

Noble Knots ist von Islands „Islendinga-App" inspiriert, hinter der eine Datenbank steht, die alle bekannten Familienverbindungen zwischen Isländern seit der Besiedlung Islands nachzeichnet. Dein Algorithmus bestimmt den Grad der Trennung zwischen zwei Personen im königlichen Stammbaum.

Wird deine App dazu beitragen, die perfekte Partie zu krönen?

Anleitung

Deine Aufgabe ist es, den Grad der Trennung zwischen zwei Personen in einem Familienstammbaum zu bestimmen. Das ist der Popkultur-Idee ähnlich, dass jeder Hollywood-Schauspieler innerhalb von sechs Graden von Kevin Bacon entfernt ist.

  • Du erhältst eine Eingabe mit allen Namen der Eltern und ihren Kindern.
  • Jeder Name ist eindeutig, ein Kind kann ein oder zwei Elternteile haben.
  • Der Grad der Trennung ist definiert als die kürzeste Anzahl von Verbindungen von einer Person zu einer anderen.
  • Wenn zwei Personen nicht verbunden sind, gib einen Wert zurück, der für „keine bekannte Beziehung“ steht. Schau dir für die tatsächliche Umsetzung die Testfälle an.

Beispiel

Gegeben ist der folgende Familienstammbaum:

      ┌──────────┐            ┌──────────┐     ┌───────────┐
      │  Helena  │            │  Erdős   ├─────┤  Shusaku  │
      └───┬───┬──┘            └─────┬────┘     └────┬──────┘
      ┌───┘   └───────┐             └───────┬───────┘
┌─────┴────┐     ┌────┴───┐           ┌─────┴────┐
│   Isla   ├─────┤ Tariq  │           │   Kevin  │
└────┬─────┘     └────┬───┘           └──────────┘
     │                │
┌────┴────┐      ┌────┴───┐
│   Uma   │      │ Morphy │
└─────────┘      └────────┘

Der Grad der Trennung zwischen Tariq und Uma ist 2 (Tariq → Isla → Uma). Zwischen Isla und Kevin gibt es keine bekannte Beziehung, da es in den gegebenen Daten keine Verbindung gibt. Der Grad der Trennung zwischen Uma und Isla ist 1.

Note

Isla und Tariq sind Geschwister und haben einen Grad der Trennung von 1. Ebenso würde diese Umsetzung einen Grad der Trennung von 2 von dir zum Bruder deines Vaters melden.

Wie diese Übung für den Python-Track aufgebaut ist

Die Tests für diese Übung erwarten, dass deine Lösung als eine RelativeDistance-class in Python implementiert wird. Wenn du mit classes in Python nicht vertraut bist, sind classes und classes in der offiziellen Python-Dokumentation gute Ausgangspunkte.

RelativeDistance sollte mit family_tree initialisiert werden (siehe __init__() für weitere Informationen), einem Wörterbuch, dessen keys die Personen und dessen values listen der Kinder dieser Person sind. Außerdem musst du eine Methode degree_of_separation implementieren, die den Grad der Trennung zwischen person_a und person_b zurückgibt, die Personen im übergebenen Familienstammbaum sind.

Du bekommst eine Stub-Implementierung für die spezielle Methode __init__, mit der eine Instanz der Klasse RelativeDistance erzeugt wird, sowie ein Stub der Methode degree_of_separation. Zuerst musst du __init__ mit einem passenden Attribut auf self (der Instanz) anpassen, das die family_tree-Daten repräsentiert. Danach kannst du deine Logik in der Methode degree_of_separation ergänzen, um den Grad der Trennung zwischen person_a und person_b zu berechnen.

Exception-Meldungen

Manchmal ist es notwendig, eine Exception auszulösen. Wenn du das tust, solltest du immer eine aussagekräftige Fehlermeldung angeben, die angibt, woher der Fehler stammt. Das macht deinen Code lesbarer und hilft beim Debugging erheblich. Wenn du weißt, dass die Fehlerquelle von einem bestimmten Typ ist, kannst du eine der eingebauten Fehlertypen auslösen, solltest aber trotzdem eine aussagekräftige Meldung angeben.

Diese Übung verlangt, dass du die raise-Anweisung verwendest, um mehrere ValueErrors zu „werfen“. Im ersten Szenario musst du einen ValueError auslösen, wenn eine oder beide der Personen, die an die Methode RelativeDistance.degree_of_separation übergeben werden, nicht im Familienstammbaum vorhanden sind.

# Example when Person A is not in the tree.
raise ValueError("Person A not in family tree.")

Wenn beide Personen im Familienstammbaum vorhanden sind, musst du einen ValueError auslösen, wenn es zwischen ihnen keine gültige Verbindung gibt, wie sie durch die Regeln definiert ist.

# Example when there are no valid connections.
raise ValueError("No connection between person A and person B.")

Die Tests bestehen nur, wenn du sowohl den erwarteten exception-Typ mit raise auslöst als auch die erwartete Meldung dazu angibst. Bitte schau dir die Tests und ihre erwarteten Ergebnisse sorgfältig an, denn diese Anleitung ist nicht vollständig.


Quelle

vaengDer Link öffnet sich in einem neuen Fenster oder Tab
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Python Exercism

Bereit, mit Verwandtschaftsabstand zu starten?

Melde dich bei Exercism an, um Python mit 17 Konzepte146 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.