Ich versuche, eine Entscheidungsaufforderung für eine Schleife mit Python 3.6 zu erstellen. Aber es funktioniert nicht
def cycle():
looping = "yes"
while looping == "No" or "no" or "n" or "N":
looping = input("Do you want to make a new calculation? n t (Y/N)")
if looping == "No" or "no" or "n" or "N":
looping = "yes"
break
elif looping != "No" or "no" or "n" or "N":
print("This is not the right answer")
looping="no"
Kann mir jemand mit diesem Code helfen? Vielen Dank!
Antworten:
1 für die Antwort № 1Neben dem Vergleichsfehler, auf den Jean-François Fabre hingewiesen hat, gibt es auch hier einen logischen Fehler. Zur Vereinfachung ist dies der Code in Ihrem Beispiel:
looping = "yes"
while looping == "no":
(do stuff which might change looping to something else)
Das while
Die Schleife beginnt nie. Sie sollten schreiben:
looping = "no"
while looping == "no":
(do stuff)
oder wie Jean-François sagte:
looping = "no"
while looping.lower() in ["no","n"]:
(do stuff)
Dann konvertieren Sie die Antwort "Nein" von jemandem zu "Ja" ...
Warum versuchen Sie nicht, immer auf dem Laufenden zu bleiben, wenn der Benutzer keine gültigen Eingaben macht:
def cycle():
newcalc = "no"
while True:
newcalc = input("Do you want to make a new calculation? n t (Y/N)")
if newcalc.lower() in ["no","n"]:
newcalc = "no"
break
if newcalc.lower() in ["yes","y"]:
newcalc = "yes"
break
print("This is not the right answer")
1 für die Antwort № 2
Sie können Strings nicht so vergleichen:
while looping == "No" or "no" or "n" or "N": # wrong
Grundsätzlich das Nachlaufende or
Aussagen prüfen nur, ob "no"
ist nicht leer usw .. sie sind nutzlos.
- Ob
looping=="No"
, Du wirst kriegenTrue
: Schleife geht weiter - Ob
looping!="No"
erhalten Sie das nächste "Nicht-Falsch":"no"
: Schleife geht weiter
richtige Methode: Konvertierung in Kleinbuchstaben und Test, ob die Zeichenfolge zu einer Liste gehört:
while looping.lower() in ["no","n"]: