ich habe ein Programm das in einen Getränkeautomaten simulieren soll. Das Programm ist in 3 Klassen unterteilt. Getränkeautomat, Produkte und Geldbeutel.
Alles funktioniert soweit aber wenn ich den Geldbeutel updaten will nach einem Kauf (Zeile 177) bekomme ich einen Fehler.
Code: Alles auswählen
Traceback (most recent call last):
File "./GetränkeAutomat.py", line 176, in <module>
c.UpdateGeldbeutel()
File "./GetränkeAutomat.py", line 151, in UpdateGeldbeutel
self.geldbeutel[2] -= self.einwurf[2]
KeyError: 2
Code: Alles auswählen
#!/usr/bin/python3
import sys
class Getraenkeautomat():
def __init__(self, produkte):
self.muenzvorrat = {2:2, 1:3, 0.50:5, 0.20:7, 0.10:10}
self.muenzarten = [2, 1, 0.50, 0.20, 0.10]
self.einwurf = {}
self.rückgeld = {}
self.guthaben = 0.0
self.ges_einwurf = 0.0
self.preis = 0.0
self.produkte = produkte
self.d = Geldbeutel(self.einwurf)
def Muenzeinwurf(self):
"""Nimmt den Münzeneinwurf entgegen und berechnet den Gesamtwert des Einwurfs"""
einwurf_zwei_euro = self.d.geldbeutel[2]+1
einwurf_ein_euro = self.d.geldbeutel[1]+1
einwurf_fünfzig_ct = self.d.geldbeutel[0.50]+1
einwurf_zwanzig_ct = self.d.geldbeutel[0.20]+1
einwurf_zehn_ct = self.d.geldbeutel[0.10]+1
print("")
while einwurf_zwei_euro > self.d.geldbeutel[2]:
einwurf_zwei_euro = int(input("Wie viele 2€ Münzen wollen sie hineinwerfen: "))
if einwurf_zwei_euro > self.d.geldbeutel[2]:
print("Sie haben keine {0} 2€ Münzen. In ihrem Geldbeutel sind {1} 2€ Münzen vorhanden"
.format(einwurf_zwei_euro, self.d.geldbeutel[2]))
while einwurf_ein_euro > self.d.geldbeutel[1]:
einwurf_ein_euro = int(input("Wie viele 1€ Münzen wollen sie hineinwerfen: "))
if einwurf_ein_euro > self.d.geldbeutel[1]:
print("Sie haben keine {0} 1€ Münzen. In ihrem Geldbeutel sind {1} 1€ Münzen vorhanden"
.format(einwurf_ein_euro, self.d.geldbeutel[1]))
while einwurf_fünfzig_ct > self.d.geldbeutel[0.50]:
einwurf_fünfzig_ct = int(input("Wie viele 0.50€ Münzen wollen sie hineinwerfen: "))
if einwurf_fünfzig_ct > self.d.geldbeutel[0.50]:
print("Sie haben keine {0} 0.50€ Münzen. In ihrem Geldbeutel sind {1} 0.50€ Münzen vorhanden"
.format(einwurf_fünfzig_ct, self.d.geldbeutel[0.50]))
while einwurf_zwanzig_ct > self.d.geldbeutel[0.20]:
einwurf_zwanzig_ct = int(input("Wie viele 0.20€ Münzen wollen sie hineinwerfen: "))
if einwurf_zwanzig_ct > self.d.geldbeutel[0.20]:
print("Sie haben keine {0} 0.20€ Münzen. In ihrem Geldbeutel sind {1} 0.20€ Münzen vorhanden"
.format(einwurf_zwanzig_ct, self.d.geldbeutel[0.20]))
while einwurf_zehn_ct > self.d.geldbeutel[0.10]:
einwurf_zehn_ct = int(input("Wie viele 0.10€ Münzen wollen sie hineinwerfen: "))
if einwurf_zehn_ct > self.d.geldbeutel[0.10]:
print("Sie haben keine {0} 0.10€ Münzen. In ihrem Geldbeutel sind {1} 0.10€ Münzen vorhanden"
.format(einwurf_zehn_ct, self.d.geldbeutel[0.10]))
self.ges_einwurf = einwurf_zwei_euro * 2 + einwurf_ein_euro * 1 + einwurf_fünfzig_ct / 2 + \
einwurf_zwanzig_ct / 5 + einwurf_zehn_ct / 10
round(self.ges_einwurf,2)
self.guthaben += self.ges_einwurf
self.einwurf = {2:einwurf_zwei_euro, 1:einwurf_ein_euro, 0.50:einwurf_fünfzig_ct,
0.20:einwurf_zwanzig_ct, 0.10:einwurf_zehn_ct}
def AenderMuenzvorrat(self):
"""Fügt den Münzen des muenzvorrat Dictionarys die Münzen vom Einwurf hinzu"""
self.muenzvorrat[2] += self.einwurf[2]
self.muenzvorrat[1] += self.einwurf[1]
self.muenzvorrat[0.50] += self.einwurf[0.50]
self.muenzvorrat[0.20] += self.einwurf[0.20]
self.muenzvorrat[0.10] += self.einwurf[0.10]
def ZeigeMuenzvorrat(self):
"""Gibt das Dictionary muenzvorrat formatiert aus"""
print("\nMünzvorrat des Automat's\n"
"2€: {0} | 1€: {1} | 50ct: {2} | 20ct: {3} | 10ct: {4}\n"
.format(self.muenzvorrat[2], self.muenzvorrat[1], self.muenzvorrat[0.50],
self.muenzvorrat[0.20], self.muenzvorrat[0.10]))
def KaufeProdukt(self):
"""Fragt nach Produktwunsch und überprüft Verfügbarkeit. Schließt den Kauf ab."""
auswahl_produkt = input("\nFür welches Produkt haben sie sich entschieden: ")
try:
self.preis = self.produkte[auswahl_produkt]["Preis"]
print("\n{0} kostet {1:2.2f}€".format(auswahl_produkt, self.preis))
if self.preis > self.guthaben:
print("\nIhnen fehlen {0:2.2f}€. Bitte den restlichen Betrag einwerfen!\n"
.format(self.preis-self.guthaben))
elif self.preis <= self.guthaben:
if self.produkte[auswahl_produkt]["Vorrat"] > 0:
self.guthaben -= self.preis
self.produkte[auswahl_produkt]["Vorrat"] -= 1
print("\nBitte entnehmen sie Ihr Produkt.\n")
else:
print("\nDieses Getränk ist momentan ausverkauft\n")
except KeyError:
print("""\nDas Produkt "{0}" führen wir nicht, verschrieben?\n""".format(auswahl_produkt))
return self.produkte
def ZeigeGuthaben(self):
print("Guthaben: {0:2.2f}€".format(self.guthaben))
def Rückgabe(self):
self.rückgeld = {2:0, 1:0, 0.50:0, 0.20:0, 0.10:0}
while self.guthaben > 2:
pass
class Produkte():
def __init__(self):
self.produkte = {"Coca-Cola": {"Preis": 2.00, "Vorrat": 3},
"Fanta": {"Preis": 1.80, "Vorrat": 3},
"Spezi": {"Preis": 1.70, "Vorrat": 3},
"Wasser": {"Preis": 1.20 , "Vorrat": 3}}
def ProduktHinzufuegen(self, produktname, preis, vorrat):
"""Fügt ein Produkt in das self.produkt dictionary ein"""
self.produkte[produktname] = {"Preis": preis, "Vorrat": vorrat}
def ZeigeProdukte(self):
"""Zeigt alle Produkte des self.produkt dictionarys formatiert an mit Preis und Vorrat"""
print("")
for prod in self.produkte:
print("{0:10} | {1:3.2f}€ | {2}".format(prod, self.produkte[prod]["Preis"], self.produkte[prod]["Vorrat"]))
class Geldbeutel():
def __init__(self, einwurf):
self.geldbeutel = {2:5, 1:7, 0.50:12, 0.20:20, 0.10:12}
self.einwurf = einwurf
self.ges_geld = 0.0
def ZeigeGeldbeutel(self):
"""Rechnet Gesamtwert des Geldbeutels aus und zeigt diesen, mit der Anzahl aller Münzen formatiert an"""
self.ges_geld = self.geldbeutel[2]*2 + self.geldbeutel[1]*1 + self.geldbeutel[0.50]/2
self.ges_geld += self.geldbeutel[0.20]/5 + self.geldbeutel[0.10]/10
print("\nMein Geldbeutel:\n"
"2€: {0} | 1€: {1} | 0.50€: {2} | 0.20€: {3} | 0.10€: {4}\nGesamt: {5:2.2f}€\n"
.format(self.geldbeutel[2], self.geldbeutel[1], self.geldbeutel[0.50], self.geldbeutel[0.20],
self.geldbeutel[0.10], self.ges_geld))
def UpdateGeldbeutel(self):
try:
self.geldbeutel[2] -= self.einwurf[2]
self.geldbeutel[1] -= self.einwurf[1]
self.geldbeutel[0.50] -= self.einwurf[0.50]
self.geldbeutel[0.20] -= self.einwurf[0.20]
self.geldbeutel[0.10] -= self.einwurf[0.10]
return self.einwurf
except TypeError:
print("Nothing to update")
if __name__ == "__main__":
b = Produkte()
a = Getraenkeautomat(b.produkte)
c = Geldbeutel(a.einwurf)
while True:
print("\nGuthaben: {0:2.2f}€".format(a.guthaben))
menu_auswahl = int(input("1. Zeige Produkte\n2. Guthaben aufladen\n3. Produkt kaufen\n"
"4. Mein Geldbeutel\nAuswahl: "))
a.guthaben
if menu_auswahl == 1:
b.ZeigeProdukte()
elif menu_auswahl == 2:
a.Muenzeinwurf()
c.UpdateGeldbeutel()
elif menu_auswahl == 3:
a.KaufeProdukt()
elif menu_auswahl == 4:
c.ZeigeGeldbeutel()
