Bug Problem mit Python

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

Sorry, das ich euch schon wieder belästige, aber ein Programm was ich grade entwickle, will nicht ganz so wie ich will. Der Benutzer bekommt aufgaben gestellt. Wenn eine Aufgabe falsch ist soll das Programm sofort beendet werden (sinn oder Unsinn des Programms steht jetzt nicht zur Debatte ;D). Obwohl ich die Richtigkeitsprüfung eingebaut habe, korrigiert Python auch bei falscher Lösung nicht, und tut so, als ob alles richtig wäre. Hier ein kleiner Ausschnitt aus dem Programm:

Code: Alles auswählen

while leben = 1:
    for i in range (5):
        zahl1 = r.randint (500, 600)
        zahl2 = r.randint (50, 70)
        zahl3 = r.randint (2, 5)
        l1 = zahl1 - zahl2 * zahl3
        eingabe = int (raw_input (str (zahl1) + "-" + str (zahl2) + "*" + str (zahl3) + "=") )
        if eingabe != l1:
            leben = 0
    print "Das erste Passwort-Symbol lautet:", a, "." "Merke dir das Gut!"
else:
    "Du hast das Spiel verloren weil du eine Aufgabe falsch geloest hast!"
Könnt ihr mir sagen wo das Problem liegt?
Wenn der Code nicht ausreicht, bescheid sagen!
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Ist der Quellcode so bei dir lauffähig??? :cry:


Sorry, aber hier fehlt der import-Befehl (du importierst das random-Modul), die Hinweise vom letzten Mal zur Formatierung ignorierst du ("str(Variable)" ohne Leerzeichen!) und leider sind auch einige Codezeilen so geartet, dass das einen Fehler produzieren müsste...

Ich habe deinen Quellcode einmal in Python 3 umgesetzt, womit ich hauptsächlich arbeite. Das sieht dann so aus:

Code: Alles auswählen

import random

a = "P"

leben = 1

while leben == 1:

    for i in range (5):
        
        zahl1 = random.randint(500, 600)
        zahl2 = random.randint(50, 70)
        zahl3 = random.randint(2, 5)
        ergebnis = zahl1 - zahl2 * zahl3
        eingabe = int(input(str(zahl1) + "-" + str(zahl2) + "*" + str(zahl3) + "="))

        if eingabe != ergebnis:
            leben = 0
            break
        
    if leben == 1:
        print("Das erste Passwort-Symbol lautet:" + a + "." "Merke dir das Gut!")
    else:
        print("Du hast das Spiel verloren weil du eine Aufgabe falsch geloest hast!")
In der Shell dann z. B.:

Code: Alles auswählen

573-51*3=420
590-69*5=245
504-68*5=164
501-56*3=333
524-68*5=184
Das erste Passwort-Symbol lautet: P. Merke dir das Gut!
PS Ich habe den Quellcode mal optimiert - da war bei mir auch noch ein ziemlicher Mist drin... Jetzt scheint es besser zu laufen.
Zuletzt geändert von pixewakb am Mittwoch 5. Dezember 2012, 19:31, insgesamt 2-mal geändert.
Dexter1997
User
Beiträge: 92
Registriert: Sonntag 2. Dezember 2012, 21:13

Das random modul wurde bereits importiert
import random as r
achso, das ist nicht meine ignoranz, ich habe nur vergessen die tipps zu beachten :o ich werde das sofort ändern.
und welche codezeilen sind so geartet das sie fehler produzieren könnten?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Dexter1997 hat geschrieben:

Code: Alles auswählen

        if eingabe != l1:
l1 ist ein grauenhafter Name für einen Bezeichner. Nicht nur, dass er absolut nichtssagend ist, er schreit auch geradezu nach Fehlinterpretationen. Ich habe ihn auch die ganze Zeit als 11 gelesen und wusste überhaupt nicht was das jetzt wieder sollte. Mit Nullen kann man ähnlichen Murks fabrizieren. JBO und JB0 lassen sich nur schwer unterscheiden.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Führ doch mal bitte deinen Code aus, den du uns hier gepostet hattest. :shock:

Du wirst feststellen, dass du in deinem Codebrocken die import-Anweisung unterschlagen hast, die Variablen nicht instanziiert sind und leider auch die while-Anweisung fehlerhaft ist ("=" statt richtig "==", du willst dort doch vergleichen). Die letzte Zeile mit dem print-Befehl hätte ich anders geschrieben. Eben explizit mit print.

Die input-Zeile würde ich auf die Schnelle so auch basteln, hätte aber möglicherweise hier die format-Option gewählt.

Code: Alles auswählen

"{} + {} * {} = ".format(3,4,5)
'3 + 4 * 5 = '
Das vereinfacht - verkürzt - etwas den Quellcode und soll schneller sein.

PS Ich bin auch eher Hobbyprogrammierer. Die Profis hier könnten es wahrscheinlich sprachlich auch besser fassen.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo Dexter1997,
schau Dir doch mal Deine Richtigkeitsprüfung an!
1) was passiert wenn die Eingabe falsch ist.
2) was passiert danach und wie unterscheidet sich nach der Prüfung falsch und richtig?

Grüße
Sirius
Dexter1997
User
Beiträge: 92
Registriert: Sonntag 2. Dezember 2012, 21:13

Hey Leute, ich habe das Programm nochmal komplett überarbeitet, und jetzt läuft es perfekt. Ich danke für eure Posts und Hilfestellungen und freue mich nun über das gelößte Problem.<3
Jetzt kan ich endlich lernen wie man Funktionen macht und was das ist. <3 <3
Danke:)
Antworten