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:57] 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 11: Zeile 11:
   - 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 student import Student 
- 
-def add_grade(student, grade): 
-    """ 
-    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): 
-    """ 
-    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): 
-    """ 
-    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 ====
Zeile 66: Zeile 23:
   - 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.
  
-==== Lösung ==== 
- 
-<code python> 
-# student.py 
-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 
-</code> 
- 
-<code python> 
-# main.py 
-from student import Student 
- 
-def add_grade(student, grade): 
-    """ 
-    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): 
-    """ 
-    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): 
-    """ 
-    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> 
  
 ---- ----
 <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.1724835459.txt.gz
  • Zuletzt geändert: 2024/08/28 10:57
  • von kmaurizi