Warum bekomme ich eine doppelte Ausgabe in Python?
Muss ein simples Spiel schreiben und wollte dabei eine Methode kreieren, welche zu erst überprüft, ob der Spieler tatsächlich "start" oder "help" eingegeben hat.
Wenn die Eingabe stimmt, dann passt alles und es kann weiter gehen.
Wenn etwas anderes als "help" oder "start" eingegeben wurde, dann soll sich die Methode neu aufrufen, damit der Spieler erneut etwas eingeben kann, was dann auf seine Korrektheit überprüft wird.
Nun klappt es super, wenn man direkt etwas richtiges eingibt, aber wenn man etwas falsches eingibt und danach etwas richtiges, dann bekomme ich die Ausgabe:
Alles richtig gemacht
faaaalsch, bitte nochmal eingeben!
und der Satz "Dann kann's ja weiter gehen" außerhalb der Methode erscheint nicht.
Ich kann nicht nachvollziehen, wo mein Fehler liegt. Vielleicht kann ja jemand helfen.
3 Antworten
Weil du OR anstatt AND verwendest.
Die Bedingung beim While muss lauten:
while (user_input != "help") and (user_input != "start"):
Das soll ja nur ausgeführt werden, wenn man WEDER help NOCH start eingibt. Also wenn die Eingabe nicht help ist UND nicht start ist.
Denn
while (user_input != "help") or (user_input != "start"):
würde ja auch ausgelöst werden, wenn man "help" eingibt:
(user_input != "help") ergibt false.
(user_input != "start") ergibt true.
false OR true ergibt true.
Ein OR gibt wahr zurück, wenn mindestens eine der Beiden Bedingungen wahr ist.
Folglich wird die Schleife dann immer ausgeführt, egal was du eingibst. Weil es immer entweder nicht help ist, oder nicht start ist.
Weil Du aus irgendeinem Grund Rekursion verwendest. Ich würde dafür lieber eine Schleife verwenden.
Außerdem sind Deine Bedingungen auch nicht das Gegenteil voneinander.
Das Gegenteil von (user_input == "help") or (user_input == "start") ist nämlich (user_input != "help") and (user_input != "start").
Ich würde das ganze so formulieren.
def query():
user_input = input().lower()
while (user_input != "help") and (user_input != "start"):
print("Falsch, bitte nochmal eingeben!")
user_input = input().lower()
return user_input # Ergibt vermutlich Sinn.
print("Tippe ...")
query()
print("Dann kann's ja weitergehen.")
Warum hast du da eigentlich eine while Schleife?
Das ist doch ne klassische If abfrage.
Aber das wird wahrscheinlich nicht das Problem mit der doppelten Ausgabe sein.
Ich fands nur seltsam
Warum hast du da eigentlich eine while Schleife?
Ich vermute, er möchte dass der Benutzer so oft aufgefordert wird, etwas einzugeben, bis er entweder "help" oder "start" eingibt.
Eine while-Schleife ist für diesen Zweck schon okay, aber die Rekursion ergibt keinen Sinn.
mir geht es nur darum, warum die Ausgabe doppelt ist, der Rest ist erst mal egal..