Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

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 382

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