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:dataclass [2024/08/28 09:22] – [Aufgabenstellung] kmaurizimodul:m323:learningunits:lu02:aufgaben:dataclass [2024/08/28 10:36] (aktuell) kmaurizi
Zeile 1: Zeile 1:
-====== LU02.A09 - Immutable Dataclass ======+====== LU02.A09 - Dataclass mit mutable Attribut ======
  
 <WRAP center round todo 60%> <WRAP center round todo 60%>
-Implementieren Sie eine Funktiondie eine neue Instanz einer Dataclass erstelltanstatt die Originalinstanz zu verändern, und nutzen Sie dabei die Prinzipien der funktionalen Programmierung.+Implementieren Sie eine Dataclass mit einem mutable Attribut und stellen Sie sicherdass jede Instanz eine unabhängige Kopie dieses Attributs erhält. Überprüfen Sie das Verhalten Ihrer Implementierungindem Sie das mutable Attribut in mehreren Instanzen ändern.
 </WRAP> </WRAP>
  
 ==== Aufgabenstellung ==== ==== Aufgabenstellung ====
  
-  - Definieren Sie eine ''@dataclass(frozen=True)'' namens ''Car'' mit den Attributen ''brand (str)''''mileage (int)'' und ''service_dates (List[str])''+  - Definieren Sie eine Dataclass namens ''Team'' mit den Attributen ''name'' und ''members'' (eine Liste von Stringsim File ''team.py'' 
-  - Implementieren Sie eine Funktion ''add_mileage(car: Car, distance: int) -> Car''die eine neue Instanz der Dataclass ''Car'' erstelltmit einer aktualisierten ''mileage'' und einer neuen Service-Datumwenn die Laufleistung über 10.000 km steigt. +  - Verwenden Sie für das Attribut ''members'' die korrekte Methodeum sicherzustellendass jede Instanz ihre eigene Liste erhält
-    - Die neue Instanz soll das aktualisierte Datum in der Liste ''service_dates'' speichern. Das Datum kann dabei ein fester Wert wie ''2024-08-28'' sein (für Testzwecke)+  - Implementieren Sie eine Funktion ''add_member(team, member)'', die einen neuen Namen zur Liste ''members'' der übergebenen Team-Instanz hinzufügt im File ''main.py'' 
-  - Implementieren Sie eine zweite Funktion ''check_service(car: Car-> bool'', die prüft, ob die Laufleistung über 10.000 km liegt und entsprechend ''True'' oder ''False'' zurückgibt. +  - Erstellen Sie zwei Instanzen von ''Team'', fügen Sie jeweils verschiedene Mitglieder hinzu und überprüfen Sie, ob die Listen der Mitglieder unabhängig voneinander bleiben. 
-  - Nutzen Sie die Funktionen, um mehrere Änderungen an einer Instanz von ''Car'' durchzuführen, und drucken Sie die Liste der Service-Daten am Ende aus.+  Geben Sie die Mitgliederlisten beider Teams aus, um das Verhalten zu bestätigen.
  
-==== Code Vorlage ==== 
  
-<code python> +==== Schritt für Schritt ====
-from dataclasses import dataclass, field +
-from typing import List+
  
-@dataclass(frozen=True) +  Definieren Sie die Dataclass ''Team'' mit den angegebenen Attributen
-class Car: +  Implementieren Sie das Attribut ''members'' sodass jede Instanz ihre eigene unabhängige Liste erhält. 
-    brand: str +  - Implementieren Sie die Funktion ''add_member'', die einen Namen zur Mitgliederliste hinzufügt. 
-    mileage: int +  Erstellen Sie zwei Instanzen der Dataclass und fügen Sie verschiedenen Instanzen verschiedene Mitglieder hinzu. 
-    service_dates: List[str] = field(default_factory=list) +  Überprüfen Sie die Unabhängigkeit der Mitgliederlisten, indem Sie die Listen beider Teams ausgeben.
- +
-def add_mileage(car: Car, distance: int) -> Car: +
-    """ +
-    Returns a new Car instance with updated mileage and possibly an updated service date. +
-    """ +
-    new_mileage = car.mileage + distance +
-    new_service_dates = car.service_dates[:+
-     +
-    if new_mileage > 10000 and (car.mileage <= 10000): +
-        new_service_dates.append('2024-08-28'+
-     +
-    return Car(brand=car.brand, mileage=new_mileage, service_dates=new_service_dates) +
- +
-def check_service(car: Car) -> bool: +
-    """ +
-    Checks if the car's mileage exceeds 10,000 km. +
-    """ +
-    return car.mileage > 10000 +
- +
-if __name__ == '__main__'+
-    my_car = Car(brand='Toyota', mileage=9500) +
-    print(f'Vor der Fahrt: {my_car}'+
-     +
-    my_car = add_mileage(my_car, 600)  # Sollte den Service hinzufügen +
-    print(f'Nach der ersten Fahrt: {my_car}'+
-     +
-    if check_service(my_car): +
-        print('Service benötigt!'+
- +
-    my_car = add_mileage(my_car100)  # Keine Änderung bei Service-Daten +
-    print(f'Nach der zweiten Fahrt: {my_car}') +
-    print(f'Service-Daten: {my_car.service_dates}'+
-</code> +
- +
-==== Schritt für Schritt ====+
  
-  - Definieren Sie die immutable Dataclass ''Car'' mit den benötigten Attributen. 
-  - Implementieren Sie die Funktion ''add_mileage'', die eine neue Instanz zurückgibt, wenn die Laufleistung aktualisiert wird und fügt gegebenenfalls ein Service-Datum hinzu. 
-  - Implementieren Sie die Funktion ''check_service'', die die Laufleistung überprüft. 
-  - Führen Sie mehrere Funktionsaufrufe durch, um die Änderungen zu testen und die Liste der Service-Daten zu überprüfen. 
  
 +----
 +<nodisp>https://github.com/templates-python/m323-lu02-a09-dataclass</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 
  • modul/m323/learningunits/lu02/aufgaben/dataclass.1724829757.txt.gz
  • Zuletzt geändert: 2024/08/28 09:22
  • von kmaurizi