Bericht erstellen
Teil des Abschnitts Logik & Ablaufsteuerung der GDScript-Journey von Coddy. Lektion 75 von 78.
Aufgabe
SchwerFüge zuletzt den Befehl sell hinzu, der mehrere Artikel auf einmal verkauft und den Umsatz ausgibt. Behalte alles bei, was du in den vorherigen Schritten geschrieben hast.
Eine Zeile wie sell Apple:30 Banana:20 verkauft 30 Äpfel und 20 Bananen. Jeder Teil nach sell besteht aus einem Artikelnamen, einem Doppelpunkt und einer Menge, und jeder Artikel kommt pro Zeile höchstens einmal vor.
Schreibe die Funktion sales_report(inventory, sales) oberhalb von _ready(). sales ist ein Dictionary, das jedem Artikelnamen die verkaufte Menge zuordnet. Gehe für jeden Artikel der Reihe nach so vor:
- Wenn der Artikel nicht in
inventoryenthalten ist, gibError: Item 'Orange' not found.aus und fahre mit dem nächsten Artikel fort - Wenn der Lagerbestand kleiner als die Menge ist, gib
Error: Insufficient stock for 'Apple'.aus und fahre mit dem nächsten Artikel fort - Andernfalls ziehe die Menge vom Lagerbestand ab und addiere Menge mal Preis zum Umsatz
Die Funktion gibt den Text Total revenue: $ gefolgt vom Umsatz mit zwei Dezimalstellen zurück.
Im Schleifenzweig für sell wird das Dictionary sales aus den Teilen nach dem Befehl erstellt. Bei einem Teil, das nicht genau aus einem Namen und einer durch : getrennten ganzen Zahl besteht, wird Error: Invalid sale 'Apple-3'. (mit diesem Teil) ausgegeben und der Teil übersprungen. Gib anschließend den Rückgabewert von sales_report() aus.
Für die Befehle add Apple 0.5 50, add Banana 0.2 60, sell Apple:30 Banana:20 Orange:10, show und exit lautet die Ausgabe:
Inventory Management System
Item 'Apple' added successfully.
Item 'Banana' added successfully.
Error: Item 'Orange' not found.
Total revenue: $19.00
{ "Apple": { "price": 0.5, "stock": 20 }, "Banana": { "price": 0.2, "stock": 40 } }
Goodbye!Probier es selbst
extends Node
func add_item(inventory: Dictionary, item: String, price: float, stock: int) -> void:
if inventory.has(item):
print("Error: Item '%s' already exists." % item)
return
inventory[item] = {"price": price, "stock": stock}
print("Item '%s' added successfully." % item)
func update_stock(inventory: Dictionary, item: String, quantity: int) -> void:
if not inventory.has(item):
print("Error: Item '%s' not found." % item)
return
var new_stock: int = inventory[item]["stock"] + quantity
if new_stock < 0:
print("Error: Insufficient stock for '%s'." % item)
return
inventory[item]["stock"] = new_stock
print("Stock for '%s' updated successfully." % item)
func check_availability(inventory: Dictionary, item: String) -> int:
if not inventory.has(item):
return -1
return inventory[item]["stock"]
func _ready():
# Das Inventar: Artikelname -> {"price": float, "stock": int}
var inventory := {}
print("Inventory Management System")
while true:
var line := OS.read_string_from_stdin()
var parts := line.split(" ")
var command := parts[0]
if command == "exit":
print("Goodbye!")
break
elif command == "show":
print(inventory)
elif command == "add":
if parts.size() != 4:
print("Error: Use add ITEM PRICE STOCK")
elif not parts[2].is_valid_float() or not parts[3].is_valid_int():
print("Error: Price and stock must be numeric.")
else:
add_item(inventory, parts[1], float(parts[2]), int(parts[3]))
elif command == "update":
if parts.size() != 3:
print("Error: Use update ITEM QUANTITY")
elif not parts[2].is_valid_int():
print("Error: Quantity must be an integer.")
else:
update_stock(inventory, parts[1], int(parts[2]))
elif command == "check":
if parts.size() != 2:
print("Error: Use check ITEM")
else:
var stock := check_availability(inventory, parts[1])
if stock == -1:
print("Item not found")
else:
print(parts[1], ": ", stock, " in stock")
else:
print("Unknown command")
Alle Lektionen in Logik & Ablaufsteuerung
1Strings im Detail
String-MethodenIn Strings suchenErsetzen und TrimmenAufteilen und ZusammenfügenRückblick – Benutzernamen prüfen4Wörterbücher Teil 2
Verschachtelte WörterbücherArrays aus WörterbüchernWörterbücher zusammenführenWörterbücher kopierenWiederholung – Häufigkeitszähler10Fortgeschrittene Funktionen
Mehrere Werte zurückgebenLambda-Funktionen Teil 1Lambda-Funktionen Teil 2Wiederholung – Sortieren mit LambdaRekursive Funktionen Teil 1Rekursive Funktionen Teil 2Wiederholung – Verschachteltes Array summieren13Inventarverwaltungssystem
ProjektübersichtArtikel hinzufügen2Fortgeschrittene Entscheidungsfindung
Match mit VariablenMatch-GuardsArray-MusterDictionary-MusterMitgliedschaftsprüfungenRückblick – Befehlsparser5Kontaktbuch-Anwendung
Menü anzeigenKontakt hinzufügen8Schülerdatenverwaltung
ProjektübersichtSchüler hinzufügen3Mehrdimensionale Arrays
Grundlagen zu 2D-ArraysAuf Elemente in 2D-Arrays zugreifenVerschachtelte Schleifen mit 2D-ArraysWiederholung – 2D-ArraysGezackte ArraysGängige Muster für 2D-ArraysWiederholung – Spielbrett6Mengen mit Dictionaries
Was ist eine Menge?Dictionary als MengeHinzufügen und EntfernenVereinigung und SchnittmengeMengendifferenzWiederholung – Duplikate entfernen9Fortgeschrittene Datenaggregation
Werte summierenMinimum und Maximum findenBenutzerdefiniertes SortierenRückblick – Wörterbuch-Sortierer12Einfache Fehlerbehandlung
Was ist Fehlerbehandlung?Eingaben validierenGuard ClausesFehlercodes zurückgebenRückblick – Sichere DivisionÜbe selbstständig: Online-GDScript-Compiler