Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
modul:m323:learningunits:lu02:aufgaben:dataclass2 [2024/08/28 10:53] kmaurizimodul:m323:learningunits:lu02:aufgaben:dataclass2 [2024/08/28 11:46] (aktuell) kmaurizi
Zeile 1: Zeile 1:
-====== LU02.A11 - Immutable Dataclasses ======+====== LU02.A11 - Immutable Dataclass ======
  
 <WRAP center round todo 60%> <WRAP center round todo 60%>
Zeile 6: Zeile 6:
  
 ==== Aufgabenstellung ==== ==== Aufgabenstellung ====
 +
 +Im Kontext der funktionalen Programmierung spielt die Unveränderlichkeit von Datenstrukturen eine zentrale Rolle. Durch die Verwendung von immutable Dataclasses stellen wir sicher, dass einmal erstellte Objekte nicht unbeabsichtigt verändert werden können. Dies führt zu vorhersehbarem Verhalten, erleichtert das Debugging und reduziert die Wahrscheinlichkeit von Seiteneffekten in Ihrem Code. In dieser Aufgabe lernen Sie, wie man immutable Dataclasses verwendet, um komplexe Datenstrukturen zu manipulieren, ohne den ursprünglichen Zustand zu verändern. Das fördert die Entwicklung von stabilen und wartbaren Programmen.
  
   - Definieren Sie eine ''@dataclass(frozen=True)'' namens ''Student'' mit den Attributen ''name'' (str), ''grades'' (List[int]), und ''graduated'' (bool).   - Definieren Sie eine ''@dataclass(frozen=True)'' namens ''Student'' mit den Attributen ''name'' (str), ''grades'' (List[int]), und ''graduated'' (bool).
   - Implementieren Sie eine Funktion ''add_grade(student: Student, grade: int) -> Student'', die eine neue Instanz der Dataclass ''Student'' zurückgibt, wobei die neue Note der Liste hinzugefügt wird.   - Implementieren Sie eine Funktion ''add_grade(student: Student, grade: int) -> Student'', die eine neue Instanz der Dataclass ''Student'' zurückgibt, wobei die neue Note der Liste hinzugefügt wird.
-  - Implementieren Sie eine Funktion ''calculate_average(student: Student) -> float'', die den Durchschnitt der Noten berechnet.+  - Implementieren Sie eine Funktion ''calculate_average(student: Student) -> float'', die den Durchschnitt der Noten auf zwei Stellen gerundet berechnet .
   - Implementieren Sie eine Funktion ''graduate_student(student: Student) -> Student'', die eine neue Instanz der Dataclass zurückgibt, bei der das Attribut ''graduated'' auf ''True'' gesetzt wird, wenn der Notendurchschnitt 70 oder mehr beträgt.   - Implementieren Sie eine Funktion ''graduate_student(student: Student) -> Student'', die eine neue Instanz der Dataclass zurückgibt, bei der das Attribut ''graduated'' auf ''True'' gesetzt wird, wenn der Notendurchschnitt 70 oder mehr beträgt.
   - Schreiben Sie ein Programm, das mehrere Noten hinzufügt, den Durchschnitt berechnet und den Studenten "absolviert", falls die Kriterien erfüllt sind. Geben Sie die Ergebnisse aus.   - Schreiben Sie ein Programm, das mehrere Noten hinzufügt, den Durchschnitt berechnet und den Studenten "absolviert", falls die Kriterien erfüllt sind. Geben Sie die Ergebnisse aus.
- 
-==== Code Vorlage ==== 
- 
-<code python> 
-from dataclasses import dataclass, field 
-from typing import List 
- 
-@dataclass(frozen=True) 
-class Student: 
-    name: str 
-    grades: List[int] = field(default_factory=list) 
-    graduated: bool = False 
- 
-def add_grade(student: Student, grade: int) -> Student: 
-    """ 
-    Returns a new Student instance with the added grade. 
-    """ 
-    new_grades = student.grades + [grade] 
-    return Student(name=student.name, grades=new_grades, graduated=student.graduated) 
- 
-def calculate_average(student: Student) -> float: 
-    """ 
-    Returns the average of the student's grades. 
-    """ 
-    if not student.grades: 
-        return 0.0 
-    return sum(student.grades) / len(student.grades) 
- 
-def graduate_student(student: Student) -> Student: 
-    """ 
-    Graduates the student if the average grade is 70 or above. 
-    """ 
-    average = calculate_average(student) 
-    if average >= 70: 
-        return Student(name=student.name, grades=student.grades, graduated=True) 
-    return student 
- 
-if __name__ == '__main__': 
-    student = Student(name='John Doe') 
-    student = add_grade(student, 85) 
-    student = add_grade(student, 75) 
-    student = add_grade(student, 60) 
- 
-    print(f'Noten: {student.grades}') 
-    average = calculate_average(student) 
-    print(f'Durchschnitt: {average}') 
- 
-    student = graduate_student(student) 
-    print(f'Absolviert: {student.graduated}') 
-</code> 
  
 ==== Schritt für Schritt ==== ==== Schritt für Schritt ====
  
-  - Definieren Sie die immutable Dataclass ''Student''.+  - Definieren Sie die immutable Dataclass ''Student'' in einer separaten Datei ''student.py''.
   - Implementieren Sie die Funktion ''add_grade'', die eine neue Instanz zurückgibt und die Note hinzufügt.   - Implementieren Sie die Funktion ''add_grade'', die eine neue Instanz zurückgibt und die Note hinzufügt.
   - Implementieren Sie die Funktion ''calculate_average'', die den Notendurchschnitt berechnet.   - Implementieren Sie die Funktion ''calculate_average'', die den Notendurchschnitt berechnet.
   - Implementieren Sie die Funktion ''graduate_student'', die eine neue Instanz zurückgibt, wenn der Student die Anforderungen erfüllt.   - Implementieren Sie die Funktion ''graduate_student'', die eine neue Instanz zurückgibt, wenn der Student die Anforderungen erfüllt.
   - Führen Sie mehrere Funktionsaufrufe durch, um die Noten zu aktualisieren, den Durchschnitt zu berechnen und den Studenten bei Erfüllung der Kriterien zu absolvieren.   - Führen Sie mehrere Funktionsaufrufe durch, um die Noten zu aktualisieren, den Durchschnitt zu berechnen und den Studenten bei Erfüllung der Kriterien zu absolvieren.
 +
  
 ---- ----
 <nodisp>https://github.com/templates-python/m323-lu02-a11-dataclass2</nodisp> <nodisp>https://github.com/templates-python/m323-lu02-a11-dataclass2</nodisp>
 [[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi  [[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi 
  • modul/m323/learningunits/lu02/aufgaben/dataclass2.1724835231.txt.gz
  • Zuletzt geändert: 2024/08/28 10:53
  • von kmaurizi