2016-07-14 23 views
-1

Eine kleine Hintergrundgeschichte: Ich muss einen Code in Python machen, der dem Benutzer hilft, ihr Telefon für ein Schulprojekt zu beheben. Der Benutzer muss die Fragen, die das Programm anfragt, nur mit "Ja" oder "Nein" beantworten.Unendliche While-Schleife Python

Das Problem, das ich habe ist, dass die Eingabe einer anderen als "Ja" oder "Nein" verursacht die Schleife Schleife unendlich, anstatt nur einmal anzuzeigen und weiter zur nächsten Frage, sobald der Benutzer 'Ja' oder Nein'.

Der Code ist noch nicht fertig, weshalb es so aussehen kann, als ob einige Ratschläge/Fragen fehlen.

EDIT: Der Code funktioniert jetzt richtig! Danke für deine Antworten, Jungs! Sie waren sehr hilfreich!

phoneFault = raw_input("Is your phone physically damaged?") 
while phoneFault != "Yes" and phoneFault != "No": 
    print("Error; you can only answer 'Yes' or 'No' to the questions.") 
if phoneFault == "Yes" or phoneFault == "yes": 
    phoneFault = raw_input("Is your phone wet?") 
    if phoneFault == "Yes" or phoneFault == "yes": 
     phoneFault = raw_input("Are you able to turn it off?") 
     if phoneFault == "Yes" or phoneFault == "yes": 
      print("Send the phone to the manufacturer and ask if they can fix it.") 
     elif phoneFault == "No" or phoneFault == "no": 
      print("Dry the phone, and then wait for the phone to run out of power and then restart it.") 
+0

Sie ändern nie den Wert von 'phoneFault', so dass sich die While-Bedingung niemals ändert. Versuchen Sie, nach der while einen weiteren phoneFault = raw_input ("Is ...") hinzuzufügen. – dave

Antwort

2
while phoneFault != "Yes" and phoneFault != "No": 
    print("Error; you can only answer 'Yes' or 'No' to the questions.") 

Diese Linie ist der Schuldige. Sobald jemand etwas anderes als "Yes" oder "No" eingibt, geben wir diese while-Schleife ein. Während dieser while-Schleife bleibt der Wert von phoneFault unverändert und deshalb drucken wir die Fehlermeldung weiterhin unendlich.

Wenn Sie die Möglichkeit hinzufügen, den phoneFault Wert während dieser While-Schleife zu ändern, löst es Ihr Problem.

0

Immer wenn Sie eine Endlosschleife erhalten, schauen Sie sich die Bedingung an und schauen Sie sich an, was diese Bedingung ändern könnte. Sie wollen wahrscheinlich so etwas, das raw_input innerhalb der Schleife setzen:

phoneFault = None 
while phoneFault != "Yes" and phoneFault != "No": 
    phoneFault = raw_input("Is your phone physically damaged?") 
    print("Error; you can only answer 'Yes' or 'No' to the questions.") 

, dass, obwohl nicht sehr benutzerfreundlich ist. Mit < Verschiebung drücken> ein Kapital Y oder N. bekommen Sie könnten dies stattdessen betrachten:

phoneFault = None 
while phoneFault != "yes" and phoneFault != "no": 
    phoneFault = raw_input("Is your phone physically damaged (Yes/No)? ").lower() 
+0

Möchten Sie nicht, dass der Fehler vor der erneuten Abfrage nach Benutzereingaben gedruckt wird? – Tyler

+0

In der 2. Lösung habe ich die Fehlermeldung als unnötig gelöscht. – cdarke

0

Obwohl Sie nur zwei Antworten pro if Zustand haben, ich persönlich bevorzuge die if phoneFault in ('Yes','yes'): Mitgliedschaft Test. Dies macht den Code lesbarer. Falls Sie möchten, dass phoneFault etwas mit "Ja" oder "Nein" vergleicht, könnten Sie an regulären Ausdrücken aus dem Modul re interessiert sein.