Artikel hinzufügen
Kunden legen laufend Dinge in ihre Warenkörbe, also braucht dein Programm dafür eine Funktion: artikel_hinzufuegen(positionen, name, preis, menge). Sie erstellt ein neues Dictionary für den Artikel und fügt es mit .append() am Ende der Liste hinzu.
Wenn du einer Funktion eine Liste übergibst, bekommt die Funktion genau dieselbe Liste, keine Kopie. Wenn also artikel_hinzufuegen() etwas an positionen anhängt, landet der Artikel in warenkorb, und der Kassenbon, der danach ausgegeben wird, zeigt ihn. Darum muss die Funktion nichts zurückgeben. Das widerspricht nicht dem, was du über lokale Variablen gelernt hast: Wenn du in einer Funktion einer Variablen etwas zuweist, entsteht eine neue lokale Variable, aber .append() weist nichts zu, es ändert die Liste selbst.
Ein gutes Programm prüft auch seine Daten. Etwas mit der Menge 0 oder sogar -1 hinzuzufügen, ergibt keinen Sinn. Prüfe also am Anfang der Funktion die Menge, und wenn sie kleiner als 1 ist, gib eine Meldung aus und beende die Funktion mit return. Weil return die Funktion beendet, wird der Code, der den Artikel hinzufügt, nicht ausgeführt. Ein return ohne Wert ist in Ordnung: Die Funktion gibt nichts zurück, sie hört nur auf. Hier ist dieselbe Idee mit einer Liste von Gästen ("" ist ein leerer Text, ohne etwas zwischen den Anführungszeichen):
def gast_hinzufuegen(gaeste, name):
if name == "":
print("Ein Gast braucht einen Namen.")
return
gaeste.append(name)
feier = ["Anna"]
gast_hinzufuegen(feier, "")
gast_hinzufuegen(feier, "Max")
print(feier)Ein Gast braucht einen Namen.
['Anna', 'Max']Die Aufrufe stehen unten, über kassenbon_ausgeben(warenkorb): Zuerst ändert sich der Warenkorb, dann wird der Kassenbon ausgegeben. Und der Kaffee bringt eine Überraschung: Mit ihm kostet die Bestellung genau 50 €.
So schreibst du es:
Anweisungen
- 1
Schreibe unter
kassenbon_ausgeben()(über dem Code ganz unten) eine Funktionartikel_hinzufuegen(positionen, name, preis, menge), die ein Dictionary mit den Schlüsseln"name","preis"und"menge"ans Ende vonpositionenanhängt. - 2
Lege unten, über
kassenbon_ausgeben(warenkorb), zwei Packungen Kaffee zu je 7 € in den Warenkorb:artikel_hinzufuegen(warenkorb, "Kaffee", 7, 2). Auf dem Kassenbon erscheint eine neue Zeile,Kaffee: 2 x 7 € = 14 €, und die Summe beträgt jetzt genau 50 €, also ist die Lieferung kostenlos:Lieferung: 0 €undZu zahlen: 50 €. Wenn die Lieferung noch 5 € kostet, prüfe die Bedingung inlieferkosten(). - 3
Füge am Anfang von
artikel_hinzufuegen()eine Prüfung hinzu: Wennmengekleiner als1ist, gibArtikel Eier kann nicht hinzugefügt werden: Die Menge muss mindestens 1 sein.aus, mit dem Namen des Artikels stattEier, und beende die Funktion mitreturn. Probiere es unter dem Kaffee aus:artikel_hinzufuegen(warenkorb, "Eier", 4, 0). Die Meldung erscheint über dem Kassenbon, und die Eier kommen nicht darauf.