====== LU12.A02 - Hofladen ======
===== Ausgangslage =====
In einem Hofladen sind verschiedene Produkte verfügbar.
Zum Speichern der Produkte definieren wir eine ''@dataclass'' mit diesen Attributen:
* Name des Artikels (Text)
* Preis des Artikels (Dezimalzahl)
* Bestand (Ganzzahl)
===== Programmaufgabe =====
Ihr Programm soll die Artikel im Hofladen verwalten.
Der Benutzer gibt zuerst den Namens eines Artikels ein.
Falls der Name ''Exit'' ist, wird das Programm beendet.
Falls der Artikel noch nicht existiert, muss der Benutzer den Preis eingeben.
Andernfalls wird der aktuelle Bestand ausgegeben.
Zuletzt gibt der Benutzer die Veränderung des Bestands ein.
==== Beispiel ====
Artikelname > Milch
Preis > 5.75
Menge > 5
Artikelname > Wurst
Preis > 21.10
Menge > 12
Artikelname > Milch
Bestand : 5
Menge > -2
Artikelname > Exit
===== Programmablauf =====
**main:**
- Erstelle eine leere Liste für die ''Artikelliste''
- Eingabe des ''Artikelnamen''
- Solange ''Artikelnamen'' nicht ''Exit'' ist
- Suche in der Liste mit dem ''Artikelnamen'' nach dem Artikel und weise diesen Artikel ''Artikel'' zu --> ''find_article(article_name, article_list):''
- Falls ''Artikel'' ''None'' ist
- Erstelle ein neuen ''Artikel'' mit dem ''Artikelnamen'', ''Preis=0.00'' und ''Bestand=0''
- Speichere das Objekt in der ''Artikelliste''
- Eingabe des ''Artikel.Preis'' --> ''input_float(prompt)''
- Sonst
- Ausgabe des aktuellen Bestands
- Eingabe der ''Menge'' --> ''input_int(prompt)''
- Addiere die ''Menge'' zum ''Artikel.Bestand''
- Eingabe des ''Artikelnamens''
- Gib die ''Artikelliste'' als Returnwert zurück
**find_article(article_name, article_list):**
- Iteriere über alle ''Artikel'' in der ''Artikelliste''
- Wenn der ''Artikelnamen'' dem ''Artikel.Artikelnamen'' entspricht
- Gib den gefundenen ''Artikel'' zurück
- Gib ''None'' zurück
===== Vorgehen =====
==== Funktionen bestimmen ====
Überlegen Sie, welche Teilaufgaben sich sinnvoll als eigenständige Funktionen realisieren lassen.
Notieren Sie zu jeder Funktion:
^ Name ^ //Name der Funktion // |
^ Aufgabe ^ //Kurze Beschreibung // |
^ Argumente ^ //Liste aller Argumente für diese Funktion// |
^ Returnwert ^ //Welche Daten liefert diese Funktion als Return// |
Sie können die Funktionen auch direkt im Pythoncode definieren.
Zum Beispiel:
def do_something(value, blabla):
"""
does something
:param value: the value of the thing to be done
:param blabla: some blabla
:return: the something that was done
"""
pass
==== Vorgehensschritte ====
Realisieren Sie zunächst die Funktionen, welche Sie zuvor identifiziert haben.
Zerlegen Sie den Programmablauf in möglichst kleine Teilschritte.
Nach jedem Teilschritt sollte das Programm ein überprüfbares Resultat erzeugen.
==== Funktionen ====
def input_int(prompt):
"""
reads an integer input from the user
:param text: the prompt to be shown
:return: the integer number
"""
pass
def input_float(prompt):
"""
reads a decimal number input from the user
:param text: the prompt to be shown
:return: the decimal number
"""
pass
def find_article(list, name):
"""
finds an article in the article list
:param list: the article list
:param name: the article name to be found
:return: article or None=not found
"""
pass
==== Vorgehensschritte ====
* Schritt 1
* Schritt 2
* Schritt 3
- Erstelle eine leere Liste für die Artikel
- Eingabe des Artikelnamens
- Solange Artikelname nicht ''Exit'' ist
- Suche den Artikel in der Liste
- Falls keine Artikel gefunden wurde
- Erstelle ein neues Artikel-Objekt und speichere es in der Liste
- Speichere den Artikelnamen
- Eingabe des Preises
- Sonst
- Ausgabe des aktuellen Bestands
- Eingabe der Menge
- Addiere die Menge zum Bestand
- Eingabe des Artikelnamens
- Gib die Artikelliste als Returnwert zurück
//=> GitHub Repo für externe Besucher//
GitHub Repository https://github.com/templates-python/m319-lu12-a02-farmshop
//Lernende am BZZ müssen den Link zum GitHub Classroom Assignment verwenden//
----
{{tag>M319-LU12}}
[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Marcel Suter