Du bist nicht angemeldet.

Werbeanzeige

1

23.12.2020, 20:41

Getränkeautomat

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
class Getraenkeeinheit:
    # die Methode __init__()
    def __init__(self,preis):
        # eine leere Liste für die Getränkenamen erstellen
        self.getraenke_namen=[]

        #die Getränke eintragen
        self.getränke_namen.append("Limonade")
        self.getränke_namen.append("Wasser")
        self.getränke_namen.append("Bier")

        self.preis=preis

        #Liste für die restlichen Flaschen
        self.rest=[]

    def__del__(self):  [b]#FEHLER HIER[/b]
        print("eine Instanz der Klasse Getränkeeinheit wurde gelöscht")

    #Methode die den Rest an die Klasse Getränkeeinheit übergibt und ausgibt wie viele Flaschen noch da sind.

    def rest_flaschen(self,rest,name):
        self.rest.append(rest)
        print("Es sind noch",self.rest,"Flaschen(n)",name,"enthalten")

    #Vereinbarung der Klasse für die Münzeinheit
class Muenzeinheit:
    def__init__(self):  [b]# FEHLER HIER[/b]
        #die Attribute
        self.betra=0    [b]# FEHLER HIER[/b]
        self.noch_zu_zahlen=0   [b]# FEHLER HIER[/b]
        self.rueckgeld=0    [b]# FEHLER HIER[/b]

    def__del__(self):     [b]# FEHLER HIER[/b]
        print("Eine Instanz der Klasse Muenzeinheit wurde gelöscht.")

    def muenzen_annehmen(self,wert):
        self.noch_zu_zahle=self.noch_zu_zahlen-wert
    def rueckgeld_geben(self):
        self.rueckgeld=abs(self.noch_zu_zahlen)
        return self.rueckgeld
    def set_betra(self,preis):
        self.betra=preis
        self.noch_zu_zahlen=self.betrag
    def get_noch_zu_zahlen(self):
        return self.noch_zu_zahlen

class Getraenkeautomat:
    def__init__(self,anzahl1,anzahl2,anzahl3,temp_zahlomat,temp_trankomat): [b]# FEHLER HIER[/b]
        self.zahlomat=temp_zahlomat [b]# FEHLER HIER[/b]
        self.trankomat=temp_trankomat [b]# FEHLER HIER[/b]

        #liste
        self.anzahl_flaschen=[]

        self.anzahl_flaschen.appent(anzahl1)
        self.anzahl_flaschen.appent(anzahl2)
        self.anzahl_flaschen.appent(anzahl3)

        self.kuelung=False

    def getraenke_waehlen(self):
        print("Gib ein Getränk ein")
        print("Es gibt folgende zur Auswahl")

        for getraenk in self.trankomat.getraenke_name:
            print(anzeige_auswahl,getraenk)
            anzeige_auswahl=anzeige_auswahl+1
        auswahl=int(input("Geben Sie die gewünschte Nummer ein"))
        auswahl=auswahl-1

        #gibt es noch Flaschen vom gewählten Getränk?
        if self.anzahl_flaschen[auswahl]!=0:
            anzahl=int(input("Wie viele Flaschen möchten sie?"))
            if anzahl>self.anzahl_flaschen(auswahl):
                anzahl=self.anzahl_flaschen[auswahl]


            #erst muss bezahlt werden,der Preis 10 ist fest vorgegeben
            print("Sie müssen",anzahl*self.trankomat.preis,"Cent bezahlen.")
            self.zahlomat.set_betra(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)

            #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,getraenk_index):
        if anzahl<self.anzahl_flaschen[getraenk_index]:
            print("Sie erhalten",anzahl,"Flaschen(n)",self.trankomat.getraenk_name[getraenk_index])
            self.anzahl_flaschen[getraenk_index]=self.anzahl_flaschen[getraenk_index]-anzahl
        else:
            print("Es sind nur noch",self.anzahl_flaschen[getraenk_index],"Flaschen",self.trankomat.getraenke_namen[getraenk_index],"vorhanden")
            print("Sie erhalten den Rest")
            self.anzahl_flaschen[getraenk_index]=0


        print("Sie erhalten",self.zahlomat.rueckgeld_geben(),"Cent zurück")
        self.trankomat.rest_flaschen(self.anzahl_flaschen[getraenk_index],self.trankomat.getraenk_name[getraenk_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")

flasche=Getraenkeeinheit(10)
einheit=Muenzeinheit()
automat=Getraenkeautomat(10,20,30,einheit,flasche)
auswahl=-1
automat.kuehlen(True)

while auswahl==-1:
    auswahl=automat.getraenke_waehlen()

    automat.kuehlen(False)

del automat
del einheit
del flasche
[/code]

Kann mit bitte einer helfen? Warum werden Fehler angezeigt, wenn ich Klassen erstellen will in Zeile 18,29,31,32,33,35,50,51 und 52

2

24.12.2020, 10:06

Du hast jeweils keine Leerzeichen zwischen def und __del__ bzw. __init__.
Das eine ist ein Schlüsselwort, das andere ein Methodenname. Da muss ein Leerzeichen dazwischen :)

Und ich hab noch Typos in den Zeilen 56-58 gesehen. Das muss "append" heißen.

Ansonsten ist mir noch aufgefallen, dass du einen Getter für das Attribut "noch_zu_zahlen" hast, was eigentlich keinen Sinn macht, weil das Attribut public ist. Du kannst einfach über Getränkeautomatobjekt.noch_zu_zahlen darauf zugreifen. Alternativ könntest du es private machen, indem du es _noch_zu_zahlen benennst (Der Unterstrich am Anfang kennzeichnet private Attribute).

Und: Kommst du aus der C/C++ Ecke? Dieses explizite Löschen der Objekte und das Benutzen von Destruktoren (sprich explizite Speicherverwaltung) ist eigentlich nicht nötig. Python hat einen Garbagekollektor.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »superolelli« (24.12.2020, 10:15)


3

24.12.2020, 16:54

Danke für den Tipp. Nein mit C++ oder C hatte ich bisher nichts zu tun. Aber ich denke das ist eine Übung dafür.

David Scherfgen

Administrator

Beiträge: 10 306

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

25.12.2020, 09:49

Für die Zukunft wäre es gut, wenn du uns auch sagen würdest, welche Fehler dir angezeigt werden. So machst du es uns einfacher dir zu helfen.

Werbeanzeige