|
| 1 | +from __future__ import annotations |
| 2 | +from wypp import * |
| 3 | + |
| 4 | +# Ein Flussabschnitt ist entweder |
| 5 | +# - ein Bach mit Namen und Quelle, oder |
| 6 | +# - ein Zusammenfluss eines Haupt- und Nebenflussabschnitts an einem bestimmten Ort. |
| 7 | + |
| 8 | +@record |
| 9 | +class Creek: |
| 10 | + origin: str |
| 11 | + name: str |
| 12 | + |
| 13 | +@record |
| 14 | +class Confluence: |
| 15 | + location: str |
| 16 | + mainStem: RiverSection |
| 17 | + tributary: RiverSection |
| 18 | + |
| 19 | +type RiverSection = Union[Creek, Confluence] |
| 20 | + |
| 21 | +kinzig1 = Creek('Loßburg', 'Kinzig') |
| 22 | +gutach = Creek('Schönwald', 'Gutach') |
| 23 | +kinzig2 = Confluence('Hausach', kinzig1, gutach) |
| 24 | +schutter1 = Creek('Schweighausen', 'Schutter') |
| 25 | +heidengraben = Creek('Lahr', 'Heidengraben') |
| 26 | +schutter2 = Confluence('Lahr', schutter1, heidengraben) |
| 27 | +kinzig3 = Confluence('Kehl', kinzig2, schutter2) |
| 28 | + |
| 29 | +# Name eines Flussabschnitts bestimmen |
| 30 | +# Eingabe: den Flussabschnitt (Typ: RiverSection) |
| 31 | +# Ergebnis: der Name (Typ: str) |
| 32 | +def riverName(r: RiverSection) -> str: |
| 33 | + if isinstance(r, Creek): |
| 34 | + return r.name |
| 35 | + elif isinstance(r, Confluence): |
| 36 | + return riverName(r.mainStem) |
| 37 | + |
| 38 | +print(riverName(kinzig3)) |
0 commit comments