2016-10-26 4 views
0

Моя программа должна попросить пользователя угадать число от 0 до 100, но я не могу получить выход правильно. В настоящий момент, если номер пользователя больше случайного числа, он выводит бесконечное количество «Ваш номер слишком высок». Кроме того, если первый UserGuess низкий, то все следующие номера будут иметь одно и то же приглашение: («Ваш номер слишком низок»), несмотря на то, что они на самом деле больше случайного числа. Я понятия не имею, что я делаю неправильно. Любая помощь будет принята с благодарностью. Спасибо!Угадайте случайное число игра 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

Вы должны попросить пользователя еще раз ввести номер, если он не догадывался правильно (внутри цикла while) – alexpeits

+0

Кстати, исправьте свой отступ, пожалуйста. – TurtleIzzy

ответ

3

Необходимо ввести больше пользовательских вводных данных, когда вы находитесь внутри цикла. Рассмотрение

UserGuess = None 

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

Как бы то ни было, вы принимаете только первое предположение. Затем вы повторно переоцениваете это. Поскольку у пользователя нет возможности изменить свое предположение, он бесконечно петлит.


Кроме того, вы захотите изменить порядок своих if/elifs.

Как можно заметить, структура

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') 

Быстрый способ получить его работу будет

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

Я исправил эту проблему, и теперь моя программа работает, когда я ввожу -1 (что означает, что я хочу сдаться), она просто говорит слишком низко. любая идея почему? –

+0

@ JaneDoe2 это потому, что блоки if и elif приводятся в порядок. Поскольку -1 меньше, чем вы предполагали, что он принимает этот оператор и движется дальше, если вы хотите, вы можете перенести третий оператор 'elif' в первый:' UserGuess == randomNumber или UserGuess == giveUp' сделать это первым, если , и сделайте свой текущий первый 'if', чтобы быть' elif' – MooingRawr

Смежные вопросы