2016-10-26 9 views
0

Mein Programm soll den Benutzer bitten, eine Zahl zwischen 0 und 100 zu erraten, aber ich kann nicht scheinen, um die Ausgabe richtig zu bekommen. Wenn die Benutzernummer größer als die Zufallszahl ist, wird im Moment eine unendliche Anzahl von "Ihre Nummer ist zu hoch" ausgedruckt. Auch wenn die erste UserGuess niedrig ist, haben alle folgenden Nummern dieselbe Eingabeaufforderung: "Ihre Nummer ist zu niedrig", obwohl sie tatsächlich größer als die Zufallszahl sind. Ich habe keine Ahnung, was ich falsch mache. Jede Hilfe würde sehr geschätzt werden. Vielen Dank!Erraten Zufallszahl Spiel Python

from random import randint 

def main(): 


    guessesTaken = 0 

    randomNumber = randint(0,100) 
    #print(randomNumber) 
    giveUp = -1 
    UserGuess = int(input("Take a guess" + "(The random number is: " + str(randomNumber) + "): ")) 

    while UserGuess != randomNumber: 

     guessesTaken += 1 

     if UserGuess < randomNumber: 
      UserGuess = int(input("Your guess is too high.Try again: ")) 

     elif UserGuess > randomNumber: 
      UserGuess = int(input("Your guess is too high.Try again: ")) 

     elif UserGuess == randomNumber or UserGuess == giveUp: 
      break 

    if UserGuess == randomNumber: 
     guessesTaken = str(guessesTaken) 
     print("Yes, that is right!") 
     print("It took you " + guessesTaken + " guesses") 
    if UserGuess == giveUp: 
     guessesTaken = str(guessesTaken) 
     randomNumber = str(randomNumber) 
     print("Better luck next time.") 
     print("You tried"+ guessesTaken + " guesses") 


    return 
    print (main()) 

if __name__ == "__main__": 
    main()  
+1

Sie haben eine Reihe zur Eingabe der Benutzer wieder fragen, ob er nicht erraten richtig (in der while-Schleife) – alexpeits

+0

BTW, fixieren Sie bitte Ihren Einzug. – TurtleIzzy

Antwort

3

Sie müssen mehr Benutzereingaben erhalten, sobald Sie in der Schleife sind. Betrachten

UserGuess = None 

while UserGuess != randomNumber: 
    UserGuess = int(input("Take a guess" + "(The random number is: " + str(randomNumber) + "): ")) 
    guessesTaken += 1 
    .... 

So wie es aussieht, nehmen Sie nur die erste Rate. Dann wertet man es immer wieder neu auf. Da es keine Möglichkeit für den Benutzer gibt, seine Schätzung zu ändern, wird eine unendliche Schleife ausgeführt.


Auch Sie möchten die Reihenfolge Ihrer if/elifs ändern.

Wie es aussieht, ist die Struktur

if guess (is too low) 
if the guess (is not too low), and (is too high) 
if the guess (is not too low), and (is not too high), and (is correct) or (is 'give up') 

Ein schneller Weg, es würde zum Laufen zu bringen sein

if UserGuess == randomNumber or UserGuess == giveUp: 
    ... 
elif UserGuess > randomNumber: 
    ... 
elif UserGuess < randomNumber: 
    .... 
+0

Ich habe dieses Problem behoben und jetzt läuft mein Programm aber wenn ich -1 (was bedeutet, dass ich aufgeben will) sagt es einfach zu niedrig. irgendeine Idee warum? –

+0

@ JaneDoe2 ist es, weil wenn und Elif Anweisung Blöcke in Reihenfolge geht. Da -1 niedriger als das ist, was Sie angenommen haben, akzeptieren Sie diese Anweisung und ziehen weiter, wenn Sie möchten, können Sie die dritte 'elif'-Anweisung in die erste verschieben:' UserGuess == randomNumber oder UserGuess == giveUp machen Sie dies zu Ihrem ersten if , und mache dein aktuelles erstes 'if' zu einem' elif' – MooingRawr