Problem mit Klassenmethoden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Dexter1997
User
Beiträge: 92
Registriert: Sonntag 2. Dezember 2012, 21:13

Ich übe mich grade darin mit Klassenmethoden zu programmieren.
Das Programm stellt eine Aufgabe. Wenn diese Aufgabe richtig beantwortet wird, werden die Werte des Charackters verbessert (eigentlich).
Doch der Code in der Spielschleife scheint nicht zu funktionieren. Der Computer verbessert die Werte nicht, gibt aber auch keine Fehlermeldung aus.
Könnt ihr mir sagen wo das Problem liegt?

Code: Alles auswählen

import random as r, time as t

Falsch_od_richtig = 0

class Spielmechanik:

    def __init__(self):
        # Charackterwerte
        self.Level = 1
        self.Score = 0
        self.Rang = "Sonderschueler"
        self.Erfahrung = 0
        self.Geld = 0
        # Vervesserungswerte
        self.Geld_plus = 0.01
        self.Score_plus = 0.1
        self.Erfahrung_plus = 0.2

        # Anderes
        self.Forschungspunkt = 0
        self.Erfahrung_benoetigt = 10
 
    def __str__(self):
        nachricht = "Level: " + str(self.Level) +"\nRang: " + str(self.Rang) + "\nScore: " + str(self.Score) + "\nGeld: " +\
                    str(self.Geld) + "\n"
        return nachricht

    def Aufgabe_richtig(self):
        self.Score += self.Score_plus
        self.Geld += self.Geld_plus

        self.Score_plus += 0.01
        self.Geld_plus += 0.01

        Wert = r.randint (1, 25)
        if Wert == 1:
            self.Forschungspunkt += 1
            print "Du hast einen Forschungspunkt erhalten!"
        elif Wert == 2 or Wert == 3:
            self.Erfahrung += self.Erfahrung_plus
        elif Wert == 4:
            self.Erfahrung += self.Erfahrung_plus * 2

    def Aufgabe_falsch(self):
        self.Score -= self.Score_plus
        self.Geld -= self.Geld_plus
        self.Erfahrung -= self.Erfahrung_plus

        self.Score_plus -= 0.01
        self.Geld_plus -= 0.01

def Aufgabe_stellen():
        zahl1 = r.randint (5, 20)
        zahl2 = r.randint (5, 20)
        loesung = int(raw_input(str(zahl1) + " + " + str(zahl2) + " = "))
        if loesung == zahl1 + zahl2:
            return "richtig"
        else:
            return "falsch"

Spieler = Spielmechanik()

while True:
    print "[1] Rechnen und Leveln"
    print "[2] Charackter anzeigen\n"
    Eingabe = int(raw_input("Was willst du tun?"))
    print

    
    if Eingabe == 1:
        Anzahl_Aufgaben = r.randint(10, 25)
        print "Du musst " + str(Anzahl_Aufgaben) + " Aufgaben loesen!"
        
        for i in range(Anzahl_Aufgaben):
            Falsch_od_richitg = Aufgabe_stellen()
            if Falsch_od_richtig == "richtig":
                Spieler.Aufgabe_richtig()
            elif Falsch_od_richtig == "falsch":
                Spieler.Aufgabe_falsch()

    if Eingabe == 2:
        print Spieler
        t.sleep(3)
        
input()
BlackJack

Ausser der Namensgebung die sich nicht an die Konventionen hält und damit teilweise verwirrend ist, und den Abkürzungen der Modulnamen auf einen Buchstaben, sehe ich da kein Problem.

Es gibt dort übrigens keine Klassenmethoden sondern nur normale Methoden. Klassenmethoden ist das was man mit der `classmethod()`-Funktion, üblicherweise mit der „decorator”-Syntax, erzeugt.
Dexter1997
User
Beiträge: 92
Registriert: Sonntag 2. Dezember 2012, 21:13

Wenn es da kein problem gibt, warum funktioniert es dann nicht? du kannst den code ja mal ausführen, er wird nicht funktionieren
BlackJack

@Dexter1997: Ich hatte mir nur die Klasse und die Methoden angeschaut, weil im Betreff steht da wäre das Problem. Wie kommst Du überhaupt darauf, dass es dort liegt? Teste die einzelnen Komponenten doch einfach mal getrennt. Also jede Methode und Funktion mit ausgewählten Argumenten aufrufen und dann das Ergebnis überpüfen ob es das ist was Du erwartest. Und wenn nicht, dann hast Du das Problem isoliert.

Edit: Und vielleicht mal die Schreibweise von Namen prüfen. Ich habe da so den Verdacht, dass Du das Problem eigentlich schon kennst und statt es zu beseitigen da eine eigentlich unsinnige Zeile eingefügt hast.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@dexter: Falsch_od_richitg?

Statt "bla"+str(bla) besser "bla {bla}".format(bla=bla) oder %.

Code: Alles auswählen

    def __str__(self):
        nachricht = """Level: {Level}
Rang: {Rang}
Score: {Score}
Geld: {Geld}
""".format(**self.__dict__)
        return nachricht
Antworten