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:dataclass1 [2024/08/28 09:46] kmaurizimodul:m323:learningunits:lu02:aufgaben:dataclass1 [2024/08/28 11:39] (aktuell) kmaurizi
Zeile 6: Zeile 6:
  
 ==== Aufgabenstellung ==== ==== Aufgabenstellung ====
 +
 +Im Rahmen der funktionalen Programmierung ist es von entscheidender Bedeutung, Datenstrukturen unveränderlich (immutable) zu gestalten. Indem wir immutable Dataclasses verwenden, vermeiden wir unbeabsichtigte Seiteneffekte und sorgen dafür, dass unsere Datenstrukturen nur durch explizite, kontrollierte Operationen verändert werden. In dieser Aufgabe werden Sie lernen, wie man eine Dataclass verwendet, um eine unveränderliche (immutable) Datenstruktur zu erstellen, und wie man diese im Kontext der funktionalen Programmierung manipuliert.
  
   - Definieren Sie eine ''@dataclass(frozen=True)'' namens ''Car'' mit den Attributen ''brand (str)'', ''mileage (int)'' und ''service_dates (List[str])''.   - Definieren Sie eine ''@dataclass(frozen=True)'' namens ''Car'' mit den Attributen ''brand (str)'', ''mileage (int)'' und ''service_dates (List[str])''.
Zeile 13: Zeile 15:
   - 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.   - 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.
  
-==== Code Vorlage ==== 
- 
-<code python> 
-from dataclasses import dataclass, field 
-from typing import List 
- 
-@dataclass(frozen=True) 
-class Car: 
-    brand: str 
-    mileage: int 
-    service_dates: List[str] = field(default_factory=list) 
- 
-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_car, 100)  # 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 ==== ==== Schritt für Schritt ====
  
-  - Definieren Sie die immutable Dataclass ''Car'' mit den benötigten Attributen+  - Definieren Sie die immutable Dataclass ''Car'' in einer separaten Datei ''car.py''
-  - 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 ''add_mileage'', die eine neue Instanz zurückgibt, wenn die Laufleistung aktualisiert wirdund fügt gegebenenfalls ein Service-Datum hinzu.
   - Implementieren Sie die Funktion ''check_service'', die die Laufleistung überprüft.   - 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.   - 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-a10-dataclass1</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/dataclass1.1724831188.txt.gz
  • Zuletzt geändert: 2024/08/28 09:46
  • von kmaurizi