==== Lösung 4 - Exception auslösen und bearbeiten ==== from builtins import int class ListIndexException(Exception): def __init__(self, index: int): super().__init__(f'Fehler: Ungültiger Index: {index}') class ListRangeException(Exception): def __init__(self): super().__init__(f'Fehler: Zu viele Werte eingegeben') class ValueRangeException(Exception): def __init__(self, grade: float): super().__init__(f'Fehler: Der Notenwert muss im Bereich 1.0 bis 6.0 liegen. Er beträgt jedoch {grade}.') class GradeList: def __init__(self): self._MAX_GRADE_COUNT = 5 self._grades = [] def add_grade(self, grade: float) -> None: if 1.0 <= grade <= 6.0: elements = self.current_grade_count if elements >= self._MAX_GRADE_COUNT: raise ListRangeException() print(f'zufügen von Note mit {grade}' ) 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, index: int) -> float: if 0 <= index < self.current_grade_count: return self._grades[index] else: raise ListIndexException(index) def remove_grade(self, index: int) -> None: self._grades.pop(index) def print(self) -> None: r = range(self.current_grade_count) for i in r: print(f"{i + 1}. Note: {self._grades[i]}") if __name__ == '__main__': 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: print("\nund nun einen weiteren Wert zufügen") demo.add_grade(3.5) except ListRangeException as lre: print(lre) demo.print() print("\nLösche Wert an 2. Stelle") demo.remove_grade(1) # Index beginnt bei 0 demo.print() # und nun einen Wert zufügen der eine ungültige Note darstellt. print("\nund nun eine ungültige Note zufügen") try: demo.add_grade(7.0) except ValueRangeException as lre: print(lre) demo.print() # und nun einen Wert an einer Stelle lesen, die es nicht gibt print("\nNote an Position 8 lesen ") try: print(demo.take_grade(8)) except ListIndexException as lie: print(lie) print(f"\nListe umfasst zur Zeit {demo.current_grade_count} Noten") print(f"Note an 3. Stelle ist {demo.take_grade(2)}") print(f"Grösse der Liste beträgt {demo.max_grade_count}\n") demo.print()