@Fabian: Das die ``while``-Schleifen deren Schleifenkörper wegen ``break`` genau einmal durchlaufen werden, und damit keine Schleifen sind, wurde ja bereits gesagt. An einer Stelle steht sogar direkt hintereinander zweimal ``break``. Das macht auch keinen Sinn, weil Code auf gleicher Ebene nach einem ``break`` natürlich nicht mehr ausgefürht werden kann.
Eine ``while``-Schleife mit Bedingung die genau 0 oder 1 mal durchlaufen wird ist auch keine ``while``-Schleife sondern eigentlich ein ``if``.
Eine weitere Bestellung würde man nicht dadurch lösen, dass man ganzen Code für eine Bestellung noch mal schreibt. Um Code wiederholt auszuführen gibt es Schleifen.
Selbst wenn der zweite Teil so funktionieren würde: Es wird vom Benutzer abgefragt ob es das war, und egal was der Benutzer da eingibt, wird erst mal "Programmende" ausgegeben. Also auch wenn der Benutzer gerne noch einen Kaffee kaufen würde.
Am Ende eines Programms sollte nicht noch mal eine Eingabe nötig sein um das Programm tatsächlich zu beenden. Das nervt Benutzer auf Dauer. Zudem ist der Text das eine beliebige Taste das Programm beenden würde falsch. Es sind nur relativ wenige Tasten(kombinationen) die zum Programmende führen.
Man nummeriert keine Namen. Entweder will man sich bessere Namen überlegen, oder gar keine Einzelnamen sondern eine Datenstruktur verwenden. Oft eine Liste. Im Konkreten Fall sind aber die angehängten Nummern bei den Namen schlicht überflüssig. `menu2` kann man ohne nachzudenken einfach `menu` nennen und bei `eingabe2` und `eingabe3` muss man keinen anderen Namen als `eingabe` verwenden, weil jeweils die vorherigen Benutzereingaben gar nicht mehr gebraucht werden.
Das zusammenstückeln von Zeichenketten und Werten mittels ``+`` und `str()` ist eher BASIC als Python. Dafür gibt es die `format()`-Methode auf Zeichenketten und f-Zeichenkettenliterale.
Zwischenstand eines Bestellvorgangs (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
def main():
print("Hello, welcome to my new Coffee-shop")
print("-" * 68)
latte = "Latte: 8€"
cappucino = "Cappucino: 9€"
esspresso = "Esspresso: 6€"
black_coffee = "Schwarzer Kaffee: 5€"
menu = f"{latte}\n{cappucino}\n{esspresso}\n{black_coffee}"
name = input("Was ist Dein Name? ")
print(
f"Hallo {name}, was für einen Kaffee möchtest Du heute trinken?"
f" Hier ist was wir verkaufen:\n\n{menu}\n"
)
eingabe = input("Gib Deine Bestellung ein: ")
if eingabe == "Latte":
print("Das macht dann 8€.")
print("Hier bitte, Dein Getränk!")
if eingabe == "Cappucino":
print("Das macht dann: 9€.")
print("Hier bitte, Dein Getränk!")
if eingabe == "Esspresso":
print("Das macht dann 6€.")
print("Hier bitte, Dein Getränk!")
if eingabe == "Schwarzen Kaffee":
print("Das macht dann 5€.")
print("Hier bitte, Dein Getränk!")
print("Programmende")
print("-----------Danke für das Nutzen des Programms-----------")
if __name__ == "__main__":
main()
Das Programm enthält allerdings Wiederholungen von Daten und Code die man so nicht machen würde. Das sind zum einen die Getränkenamen und Preise und zum Anderen die Ausgaben die sich pro Getränk kaum unterscheiden. Die zweite Ausgabe ist sogar bei allen Getränken gleich. Die Getränke und Preise stehen hier hart kodiert im Code statt *einmal* in einer Datenstruktur, wo man das leicht ändern/erweitern kann, ohne das man dafür den Code ändern muss.
Und man würde den Benutzer eigentlich schon nicht zwingen wollen komplette Getränkenamen einzugeben. Da würde ich mindestens mal führende und folgende Leerzeichen und Gross-/Kleinschreibung ignorieren. Aber eigentlich würde man es dem Benutzer einfacher machen wollen etwas aus dem Menü zu wählen. Beispielsweise in dem man die Optionen nummeriert und der Benutzer eine Nummer eingibt.
Zwischenstand (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
def main():
drink_to_price = {
"latte": 8,
"cappucino": 9,
"esspresso": 6,
"schwarzer kaffee": 5,
}
print("Hello, welcome to my new Coffee-shop")
print("-" * 68)
name = input("Was ist Dein Name? ")
print(
f"Hallo {name}, was für einen Kaffee möchtest Du heute trinken?"
f" Hier ist was wir verkaufen:\n"
)
for drink, price in drink_to_price.items():
print(f"{drink.title()}: {price}€")
drink = input("\nGib Deine Bestellung ein: ").strip().lower()
price = drink_to_price.get(drink)
if price is None:
print("Das führen wir leider nicht!")
else:
print(f"Das macht dann {price}€")
print("Hier bitte, Dein Getränk!")
print("Programmende")
print("-----------Danke für das Nutzen des Programms-----------")
if __name__ == "__main__":
main()