Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
| modul:archiv:m320:learningunits:lu03:loesungen:lu4-aufgabe_2 [2026/08/30 14:06] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | modul:archiv:m320:learningunits:lu03:loesungen:lu4-aufgabe_2 [2026/08/30 14:06] (aktuell) – ↷ Seite von modul:m320:learningunits:lu03:loesungen:lu4-aufgabe_2 nach modul:archiv:m320:learningunits:lu03:loesungen:lu4-aufgabe_2 verschoben msuter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ==== Lösung 4 - Exception auslösen und bearbeiten ==== | ||
| + | <code python> | ||
| + | from builtins import int | ||
| + | |||
| + | class ListIndexException(Exception): | ||
| + | def __init__(self, | ||
| + | super().__init__(f' | ||
| + | |||
| + | class ListRangeException(Exception): | ||
| + | def __init__(self): | ||
| + | super().__init__(f' | ||
| + | |||
| + | |||
| + | class ValueRangeException(Exception): | ||
| + | |||
| + | def __init__(self, | ||
| + | super().__init__(f' | ||
| + | |||
| + | |||
| + | class GradeList: | ||
| + | def __init__(self): | ||
| + | self._MAX_GRADE_COUNT = 5 | ||
| + | self._grades = [] | ||
| + | |||
| + | def add_grade(self, | ||
| + | if 1.0 <= grade <= 6.0: | ||
| + | elements = self.current_grade_count | ||
| + | if elements >= self._MAX_GRADE_COUNT: | ||
| + | raise ListRangeException() | ||
| + | print(f' | ||
| + | self._grades.append(grade) | ||
| + | else: | ||
| + | raise ValueRangeException(grade) | ||
| + | |||
| + | |||
| + | @property | ||
| + | def max_grade_count(self) -> int: | ||
| + | return self._MAX_GRADE_COUNT | ||
| + | |||
| + | @property | ||
| + | def current_grade_count(self) -> int: | ||
| + | return len(self._grades) | ||
| + | |||
| + | def take_grade(self, | ||
| + | if 0 <= index < self.current_grade_count: | ||
| + | return self._grades[index] | ||
| + | else: | ||
| + | raise ListIndexException(index) | ||
| + | |||
| + | def remove_grade(self, | ||
| + | self._grades.pop(index) | ||
| + | |||
| + | def print(self) -> None: | ||
| + | r = range(self.current_grade_count) | ||
| + | for i in r: | ||
| + | print(f" | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | if __name__ == ' | ||
| + | demo = GradeList() | ||
| + | demo.add_grade(4.5) | ||
| + | demo.add_grade(5.0) | ||
| + | demo.add_grade(3.5) | ||
| + | demo.add_grade(4.0) | ||
| + | demo.add_grade(4.5) | ||
| + | demo.print() | ||
| + | # und einen nächsten Wert einfügen, der zu einem Overflow führen wird. | ||
| + | try: | ||
| + | | ||
| + | | ||
| + | except ListRangeException as lre: | ||
| + | print(lre) | ||
| + | demo.print() | ||
| + | |||
| + | print(" | ||
| + | demo.remove_grade(1) | ||
| + | demo.print() | ||
| + | |||
| + | # und nun einen Wert zufügen der eine ungültige Note darstellt. | ||
| + | print(" | ||
| + | try: | ||
| + | | ||
| + | except ValueRangeException as lre: | ||
| + | print(lre) | ||
| + | demo.print() | ||
| + | |||
| + | # und nun einen Wert an einer Stelle lesen, die es nicht gibt | ||
| + | print(" | ||
| + | try: | ||
| + | | ||
| + | except ListIndexException as lie: | ||
| + | print(lie) | ||
| + | |||
| + | print(f" | ||
| + | print(f" | ||
| + | print(f" | ||
| + | demo.print() | ||
| + | </ | ||