Kurzusok
/
Python
Python
/
Feladatok
/
Relatív távolság
Relatív távolság

Relatív távolság

Közepes

Bevezetés

Felvettek, hogy kifejleszd a Noble Knots alkalmazást, a nemesség legmenőbb új társkereső appját! Az évszázadok óta tartó királyi összeházasodások miatt a dolgok… bonyolulttá váltak. Hogy elkerüld a hopp, ikrek vagyunk helyzeteket, az a feladatod, hogy építs egy rendszert, amely ellenőrzi, hogy két ember milyen szoros rokonságban van egymással.

A Noble Knots alkalmazást Izland „Islendinga-App” ihlette, amely mögött egy olyan adatbázis áll, amely az izlandiak közötti összes ismert családi kapcsolatot nyomon követi Izland betelepítésének idejétől kezdve. Az algoritmusod fogja meghatározni az elválasztási fokot két személy között a királyi családfán.

Vajon az appod segít megkoronázni a tökéletes párt?

Utasítások

A feladatod, hogy meghatározd két személy elkülönülési fokát egy családfában. Ez hasonlít ahhoz a popkulturális elképzeléshez, hogy minden hollywoodi színész hat lépésre van Kevin Bacontől.

  • Egy bemenetet kapsz, amely tartalmazza az összes szülő nevét és a gyermekeiket.
  • Minden név egyedi, és egy gyermeknek lehet egy vagy két szülője.
  • Az elkülönülési fok az egyik személytől a másikig vezető kapcsolatok legrövidebb száma.
  • Ha két személy nem kapcsolódik egymáshoz, olyan értéket adj vissza, amely a „nincs ismert kapcsolat” jelentést hordozza. A tényleges megvalósítást nézd meg a tesztesetekben.

Példa

Adott a következő családfa:

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

Tariq és Uma között az elkülönülési fok 2 (Tariq → Isla → Uma). Isla és Kevin között nincs ismert kapcsolat, mivel az adott adatokban nincs összeköttetés. Uma és Isla között az elkülönülési fok 1.

Note

Isla és Tariq testvérek, az elkülönülési fokuk 1. Hasonlóképpen ez a megvalósítás 2-es elkülönülési fokot adna meg közötted és az apád fivére között.

Így épül fel ez a feladat a Python-kurzuson

A feladat tesztjei elvárják, hogy a megoldásodat Pythonban egy RelativeDistance class-ként valósítsd meg. Ha még nem ismered a Python class-eket, jó kiindulópont lehet a classes, valamint a Python hivatalos dokumentációjában a classes.

A RelativeDistance-t egy family_tree szótárral kell inicializálni (további információért lásd: __init__()), amelyben a keys a személyek, a values pedig az adott személy gyermekeinek list-jei. Ezenkívül meg kell valósítanod egy degree_of_separation metódust is, amely visszaadja person_a és person_b rokonsági fokát, akik a kapott családfában szereplő személyek.

A RelativeDistance osztály példányosításához használt __init__ speciális metódushoz kapsz egy vázlatos implementációt, valamint a degree_of_separation metódus vázlatát is. Először az __init__-et kell testre szabnod egy megfelelő attribútummal a self-en (a példányon), amely a family_tree adatait képviseli. Ezután hozzáadhatod a logikádat a degree_of_separation metódushoz, hogy kiszámítsd person_a és person_b rokonsági fokát.

Kivételüzenetek

Néha szükség van arra, hogy kivételt dobj. Amikor ezt teszed, mindig adj meg egy beszédes hibaüzenetet, amely megmutatja, mi a hiba forrása. Ez olvashatóbbá teszi a kódot, és jelentősen megkönnyíti a hibakeresést. Ha tudod, hogy a hiba forrása egy bizonyos típusú lesz, dönthetsz úgy, hogy a beépített hibatípusok egyikét dobod, de ilyenkor is adj meg beszédes üzenetet.

Ebben a feladatban a raise utasítást kell használnod ahhoz, hogy több ValueError-t „dobj”. Az első esetben ValueError-t kell dobnod, ha a RelativeDistance.degree_of_separation metódusnak átadott személyek közül az egyik vagy mindkettő nem szerepel a családfában.

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

Ha mindkét személy szerepel a családfában, akkor ValueError-t kell dobnod, ha a szabályok szerint nincs érvényes kapcsolat közöttük.

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

A tesztek csak akkor futnak át, ha a várt exception típust raise-eled, és mellé a várt üzenetet is odaírod. Nézd át figyelmesen a teszteket és a várt eredményeiket, mert ez az útmutató nem teljes körű.


Forrás

vaengA hivatkozás új ablakban vagy lapon nyílik meg
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Python Exercism

Készen állsz elkezdeni a(z) Relatív távolság feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Python nyelvet 17 fogalom146 feladat segítségével, valódi emberi mentorálással, mindez ingyen.