Getränkeautomat - Hilfe benötigt
Verfasst: Donnerstag 5. August 2021, 00:55
Hallo Forum-Mitglieder,
ich heiße Miko und bin neu hier. Ich habe erst vor kurzer Zeit mit dem Programmieren begonnen.
In meinem Kurs beschäftige ich mich gerade mit der Aufgabe eines Getränkeautomaten zu erstellen.
Ich habe mich hier etwas "festgefahren".
Die Aufgabenstellung ist Folgende:
1. Aufgabe:
Erstellen Sie eine Klasse für Getränke. Die Klasse soll den Namen des Getränks, den Preis pro Flasche und die noch vorhandene Anzahl Flaschen speichern können.
Ersetzen Sie dann in dem Getränkeautomaten aus diesem Studienheft die Attribute für die Getränke durch Instanzen der Klasse für die Getränke. Achten Sie dabei bitte auf die Datenkapselung.
Benutzen Sie für die Lösung mit den Methoden _init_() und _del_().
2. Aufgabe:
Erstellen Sie den Getränkeautomaten so, dass vor der Berechnung des Gesamtpreises geprüft wird, ob noch genügend Flaschen des gewünschten Getränks vorhanden sind. Wenn nicht, muss der Gesamtpreis aus der noch maximal verfügbaren Anzahl Flaschen berechnet werden. Es soll auch keine Rückgabe des eventuell zu viel gezahlten Geldes erfolgen.
Ich würde mich sehr freuen , wenn mir jemand etwas dazu sagen kann.
Hier ist mein code und anschließend die Fehlermeldung.
"""************************************************
Vorlage: Der Getränkeautomat Version 6
Lösung der Aufgabe 1 und Aufgabe 2
************************************************"""
# die Vereinbarung der Klasse für die Getränkeeinheit
class Getraenkeeinheit:
# die Methode __init__()
def __init__(self, temp_name, temp_preis, temp_anzahl):
# eine leere Liste für die Getränkenamen
self.getraenke_name = []
# die Getränke eintragen
self.getraenke_name.append("Limonade")
self.getraenke_name.append("Wasser")
self.getraenke_name.append("Bier")
self.name = temp_name
self.name = name
# eine leere Liste für die Getränkepreise
self.getraenke_preis = []
# den Preis eintragen
self.getraenke_preis.append(10)
self.getraenke_preis.append(20)
self.getraenke_preis.append(30)
self.preis = temp_preis
# Preis pro Flasche
self.preis = preis
# eine leere Liste für die Getränkeanzahl
self.getraenke_anzahl = []
# die Anzahl eintragen
self.getraenke_anzahl.append(10)
self.getraenke_anzahl.append(15)
self.getraenke_anzahl.append(20)
self.anzahl = temp_anzahl
self.anzahl = anzahl
# Liste für die restlichen Flaschen
self.rest = []
# die Methode __del__()
def __del__(self):
print("Eine Instanz der Klasse Getränkeeinheit wurde gelöscht")
def get_namen(self):
return self.name
# Methode, die den Rest an die Klasse "Getränkeeinheit" übergibt
def rest_flaschen(self, rest, name):
self.rest.append(rest)
# Ausgabe wie viele Flaschen noch vorhanden sind
print("Es sind noch", self.rest, "Flaschen(n)", name, "enthalten.")
# die Vereinbarung der Klasse für die Münzeinheit
class Muenzeinheit:
# die Methode __init__()
def __init__(self):
# die Attribute
self.betrag = 0
self.noch_zu_zahlen = 0
self.rueckgeld = 0
# die Methode __del__()
def __del__(self):
print("Eine Instanz der Klasse Muenzeinheit wurde gelöscht.")
# die weiteren Methoden
def muenzen_annehmen(self, wert):
self.noch_zu_zahlen = self.noch_zu_zahlen - wert
def rueckgeld_geben(self):
# den absoluten Betrag von noch_zu_zahlen als Rückgeld liefern
self.rueckgeld = abs(self.noch_zu_zahlen)
return self.rueckgeld
def set_betrag(self, preis):
self.betrag = preis
self.noch_zu_zahlen = self.betrag
def get_noch_zu_zahlen(self):
return self.noch_zu_zahlen
# die Vereinbarung der Klasse für den Getränkeautomat
class Getraenkeautomat:
# übergeben werden die Anzahl und eine Referenz auf die Münzeinheit
# die Methode __init__()
def __init__(self, temp_zahlomat, temp_trankomat):
# die Attribute
# jetzt ist die Münzeinheit Teil des Automaten
self.zahlomat = temp_zahlomat
# jetzt ist die Getränkeeinheit Teil des Automaten
self.trankomat = temp_trankomat
self.name = self.trankomat.get_namen()
self.preis = self.trankomat.get_preis()
# eine leere liste für die Anzahl der Flaschen
self.anzahl_flaschen = self.trankomat.get_anzahl_flaschen()
# die Anzahl der Flaschen
# sie werden jetzt durch die Argumente gesetzt
self.anzahl_flaschen.append(anzahl1)
self.anzahl_flaschen.append(anzahl2)
self.anzahl_flaschen.append(anzahl3)
# die Kühlung ist aus
self.kuehlung = False
# die Methode __del__()
def __del__(self):
print("Eine Instanz der Klasse Getraenkeautomat wurde gelöscht.")
# Auswahl der Getränke durch Abfrage des Anwenders
def getraenk_waehlen(self):
print("Bitte wählen Sie ein Getränk!")
print("Es gibt folgende Auswahl:")
anzeige_auswahl = 1
# Anzeige der Getränkeliste
for getraenk in self.trankomat.getraenke_name:
print(anzeige_auswahl, getraenk)
anzeige_auswahl = anzeige_auswahl + 1
# Auswahl
auswahl = int(input("Geben Sie die gewünschte Nummer ein: "))
# gibt es noch Flaschen vom gewählten Getränk?
if int(self.anzahl_flaschen[auswahl-1]) != 0:
auswahl = auswahl - 1
# die Anzahl der Flaschen einlesen
anzahl = int(input("Wie viele Flaschen möchten Sie? "))
# überprüfen ob genug Flaschen vorhanden sind
# die Anzahl der Flaschen wird auf die noch vorhandene Anzahl der Flaschen geändert
if anzahl > self.anzahl_flaschen[auswahl]:
anzahl = self.anzahl_flaschen[auswahl]
# erst muss bezahlt werden - Der Preis wird mit der Anzahl der gewählten Flaschen berechnet
# der Preis 10 ist fest vorgegeben
print("Sie müssen", anzahl * self.trankomat.preis, "Cent bezahlen.")
self.zahlomat.set_betrag(anzahl * self.trankomat.preis)
while self.zahlomat.get_noch_zu_zahlen() > 0:
print("Es fehlen noch", self.zahlomat.get_noch_zu_zahlen(), "Cent.")
self.zahlomat.muenzen_annehmen(3)
# das Getraenk ausgeben
self.getraenk_ausgeben(anzahl, auswahl)
else:
print("Das gewählte Getränk ist leider nicht mehr vorhanden.")
auswahl = -1
return auswahl
def getraenk_ausgeben(self, anzahl, getraenke_index):
# gibt es noch genügend Flaschen?
if anzahl <= self.anzahl_flaschen[getraenke_index]:
print("Sie erhalten", anzahl, "Flasche(n)", self.trankomat.getraenke_name[getraenke_index])
self.anzahl_flaschen[getraenke_index] = self.anzahl_flaschen[getraenke_index] - anzahl
else:
print("Es sind nur noch", self.anzahl_flaschen[getraenke_index], "Flaschen", self.trankomat.getraenke_name[getraenke_index], "vorhanden.")
print("Sie erhalten", anzahl, "Flaschen(n).")
self.anzahl_flaschen[getraenke_index] = 0
# Geld zurückgeben
print("Sie erhalten", self.zahlomat.rueckgeld_geben(), "Cent zurück.")
# aufrufen der Methode für die Übergabe restlichen Flaschen
# die Werte für die verbleibenden Flaschen nach der Ausgabe und der Name werden übergeben
self.trankomat.rest_flaschen(self.anzahl_flaschen[getraenke_index], self.trankomat.getraenke_name[getraenke_index])
def kuehlen(self, an_aus):
self.kuehlung = an_aus
if self.kuehlung == True:
print("Die Kühlung ist eingeschaltet.")
else:
print("Die Kühlung ist ausgeschaltet.")
# eine Getränkeeinheit erzeugen und Attribute übergeben
flasche = Getraenkeeinheit(getraenke_name, getraenke_preis, getraenke_anzahl)
# eine Münzeinheit erzeugen
einheit = Muenzeinheit()
# einen Automaten erzeugen
# die Münzeinheit und die Anzahl der Getränke übergeben
automat = Getraenkeautomat(einheit, flasche)
auswahl = -1
# die Kühlung einschalten
automat.kuehlen(True)
# ein Getränk auswählen
while auswahl == -1:
auswahl = automat.getraenk_waehlen()
# die Kühlung ausschalten
automat.kuehlen(False)
# die Instanzen ausdrücklich freigeben
# zuerst den Automaten
del automat
# die Getränkeeinheit
del flasche
# die Münzeinheit
del einheit
Fehlermeldung:
Traceback (most recent call last):
File "D:\06. Weiterbildung - Kurse\Der Getränkeautomat - NEU.py", line 181, in <module>
flasche = Getraenkeeinheit(getraenke_name, getraenke_preis, getraenke_anzahl)
NameError: name 'getraenke_name' is not defined
Process finished with exit code 1
ich heiße Miko und bin neu hier. Ich habe erst vor kurzer Zeit mit dem Programmieren begonnen.
In meinem Kurs beschäftige ich mich gerade mit der Aufgabe eines Getränkeautomaten zu erstellen.
Ich habe mich hier etwas "festgefahren".
Die Aufgabenstellung ist Folgende:
1. Aufgabe:
Erstellen Sie eine Klasse für Getränke. Die Klasse soll den Namen des Getränks, den Preis pro Flasche und die noch vorhandene Anzahl Flaschen speichern können.
Ersetzen Sie dann in dem Getränkeautomaten aus diesem Studienheft die Attribute für die Getränke durch Instanzen der Klasse für die Getränke. Achten Sie dabei bitte auf die Datenkapselung.
Benutzen Sie für die Lösung mit den Methoden _init_() und _del_().
2. Aufgabe:
Erstellen Sie den Getränkeautomaten so, dass vor der Berechnung des Gesamtpreises geprüft wird, ob noch genügend Flaschen des gewünschten Getränks vorhanden sind. Wenn nicht, muss der Gesamtpreis aus der noch maximal verfügbaren Anzahl Flaschen berechnet werden. Es soll auch keine Rückgabe des eventuell zu viel gezahlten Geldes erfolgen.
Ich würde mich sehr freuen , wenn mir jemand etwas dazu sagen kann.
Hier ist mein code und anschließend die Fehlermeldung.
"""************************************************
Vorlage: Der Getränkeautomat Version 6
Lösung der Aufgabe 1 und Aufgabe 2
************************************************"""
# die Vereinbarung der Klasse für die Getränkeeinheit
class Getraenkeeinheit:
# die Methode __init__()
def __init__(self, temp_name, temp_preis, temp_anzahl):
# eine leere Liste für die Getränkenamen
self.getraenke_name = []
# die Getränke eintragen
self.getraenke_name.append("Limonade")
self.getraenke_name.append("Wasser")
self.getraenke_name.append("Bier")
self.name = temp_name
self.name = name
# eine leere Liste für die Getränkepreise
self.getraenke_preis = []
# den Preis eintragen
self.getraenke_preis.append(10)
self.getraenke_preis.append(20)
self.getraenke_preis.append(30)
self.preis = temp_preis
# Preis pro Flasche
self.preis = preis
# eine leere Liste für die Getränkeanzahl
self.getraenke_anzahl = []
# die Anzahl eintragen
self.getraenke_anzahl.append(10)
self.getraenke_anzahl.append(15)
self.getraenke_anzahl.append(20)
self.anzahl = temp_anzahl
self.anzahl = anzahl
# Liste für die restlichen Flaschen
self.rest = []
# die Methode __del__()
def __del__(self):
print("Eine Instanz der Klasse Getränkeeinheit wurde gelöscht")
def get_namen(self):
return self.name
# Methode, die den Rest an die Klasse "Getränkeeinheit" übergibt
def rest_flaschen(self, rest, name):
self.rest.append(rest)
# Ausgabe wie viele Flaschen noch vorhanden sind
print("Es sind noch", self.rest, "Flaschen(n)", name, "enthalten.")
# die Vereinbarung der Klasse für die Münzeinheit
class Muenzeinheit:
# die Methode __init__()
def __init__(self):
# die Attribute
self.betrag = 0
self.noch_zu_zahlen = 0
self.rueckgeld = 0
# die Methode __del__()
def __del__(self):
print("Eine Instanz der Klasse Muenzeinheit wurde gelöscht.")
# die weiteren Methoden
def muenzen_annehmen(self, wert):
self.noch_zu_zahlen = self.noch_zu_zahlen - wert
def rueckgeld_geben(self):
# den absoluten Betrag von noch_zu_zahlen als Rückgeld liefern
self.rueckgeld = abs(self.noch_zu_zahlen)
return self.rueckgeld
def set_betrag(self, preis):
self.betrag = preis
self.noch_zu_zahlen = self.betrag
def get_noch_zu_zahlen(self):
return self.noch_zu_zahlen
# die Vereinbarung der Klasse für den Getränkeautomat
class Getraenkeautomat:
# übergeben werden die Anzahl und eine Referenz auf die Münzeinheit
# die Methode __init__()
def __init__(self, temp_zahlomat, temp_trankomat):
# die Attribute
# jetzt ist die Münzeinheit Teil des Automaten
self.zahlomat = temp_zahlomat
# jetzt ist die Getränkeeinheit Teil des Automaten
self.trankomat = temp_trankomat
self.name = self.trankomat.get_namen()
self.preis = self.trankomat.get_preis()
# eine leere liste für die Anzahl der Flaschen
self.anzahl_flaschen = self.trankomat.get_anzahl_flaschen()
# die Anzahl der Flaschen
# sie werden jetzt durch die Argumente gesetzt
self.anzahl_flaschen.append(anzahl1)
self.anzahl_flaschen.append(anzahl2)
self.anzahl_flaschen.append(anzahl3)
# die Kühlung ist aus
self.kuehlung = False
# die Methode __del__()
def __del__(self):
print("Eine Instanz der Klasse Getraenkeautomat wurde gelöscht.")
# Auswahl der Getränke durch Abfrage des Anwenders
def getraenk_waehlen(self):
print("Bitte wählen Sie ein Getränk!")
print("Es gibt folgende Auswahl:")
anzeige_auswahl = 1
# Anzeige der Getränkeliste
for getraenk in self.trankomat.getraenke_name:
print(anzeige_auswahl, getraenk)
anzeige_auswahl = anzeige_auswahl + 1
# Auswahl
auswahl = int(input("Geben Sie die gewünschte Nummer ein: "))
# gibt es noch Flaschen vom gewählten Getränk?
if int(self.anzahl_flaschen[auswahl-1]) != 0:
auswahl = auswahl - 1
# die Anzahl der Flaschen einlesen
anzahl = int(input("Wie viele Flaschen möchten Sie? "))
# überprüfen ob genug Flaschen vorhanden sind
# die Anzahl der Flaschen wird auf die noch vorhandene Anzahl der Flaschen geändert
if anzahl > self.anzahl_flaschen[auswahl]:
anzahl = self.anzahl_flaschen[auswahl]
# erst muss bezahlt werden - Der Preis wird mit der Anzahl der gewählten Flaschen berechnet
# der Preis 10 ist fest vorgegeben
print("Sie müssen", anzahl * self.trankomat.preis, "Cent bezahlen.")
self.zahlomat.set_betrag(anzahl * self.trankomat.preis)
while self.zahlomat.get_noch_zu_zahlen() > 0:
print("Es fehlen noch", self.zahlomat.get_noch_zu_zahlen(), "Cent.")
self.zahlomat.muenzen_annehmen(3)
# das Getraenk ausgeben
self.getraenk_ausgeben(anzahl, auswahl)
else:
print("Das gewählte Getränk ist leider nicht mehr vorhanden.")
auswahl = -1
return auswahl
def getraenk_ausgeben(self, anzahl, getraenke_index):
# gibt es noch genügend Flaschen?
if anzahl <= self.anzahl_flaschen[getraenke_index]:
print("Sie erhalten", anzahl, "Flasche(n)", self.trankomat.getraenke_name[getraenke_index])
self.anzahl_flaschen[getraenke_index] = self.anzahl_flaschen[getraenke_index] - anzahl
else:
print("Es sind nur noch", self.anzahl_flaschen[getraenke_index], "Flaschen", self.trankomat.getraenke_name[getraenke_index], "vorhanden.")
print("Sie erhalten", anzahl, "Flaschen(n).")
self.anzahl_flaschen[getraenke_index] = 0
# Geld zurückgeben
print("Sie erhalten", self.zahlomat.rueckgeld_geben(), "Cent zurück.")
# aufrufen der Methode für die Übergabe restlichen Flaschen
# die Werte für die verbleibenden Flaschen nach der Ausgabe und der Name werden übergeben
self.trankomat.rest_flaschen(self.anzahl_flaschen[getraenke_index], self.trankomat.getraenke_name[getraenke_index])
def kuehlen(self, an_aus):
self.kuehlung = an_aus
if self.kuehlung == True:
print("Die Kühlung ist eingeschaltet.")
else:
print("Die Kühlung ist ausgeschaltet.")
# eine Getränkeeinheit erzeugen und Attribute übergeben
flasche = Getraenkeeinheit(getraenke_name, getraenke_preis, getraenke_anzahl)
# eine Münzeinheit erzeugen
einheit = Muenzeinheit()
# einen Automaten erzeugen
# die Münzeinheit und die Anzahl der Getränke übergeben
automat = Getraenkeautomat(einheit, flasche)
auswahl = -1
# die Kühlung einschalten
automat.kuehlen(True)
# ein Getränk auswählen
while auswahl == -1:
auswahl = automat.getraenk_waehlen()
# die Kühlung ausschalten
automat.kuehlen(False)
# die Instanzen ausdrücklich freigeben
# zuerst den Automaten
del automat
# die Getränkeeinheit
del flasche
# die Münzeinheit
del einheit
Fehlermeldung:
Traceback (most recent call last):
File "D:\06. Weiterbildung - Kurse\Der Getränkeautomat - NEU.py", line 181, in <module>
flasche = Getraenkeeinheit(getraenke_name, getraenke_preis, getraenke_anzahl)
NameError: name 'getraenke_name' is not defined
Process finished with exit code 1