2014-10-05 4 views
1

Я недавно был сам преподающим питоном, и я делаю свою первую попытку игры. Идея заключается в том, что пользователь должен угадать, что такое ответ (целочисленный). Мой код еще не завершен, но первая половина не будет работать.Код не работает, как я ожидал (Python 3.x.x)

Мой код:; «! Ответ выше»

highest = 10 
answer = 7 
guess = int(input("What is your guess?")) 
def guessingGame(): 
    print("try again please") 
    guess = int(input("what is your guess?")) 

while (int(guess) != answer): 

    if (int(guess) < answer): 
     print ("Answer is higher!") 
     guessingGame(); 

    elif (int(guess) > answer): 
     print ("Answer is lower!") 
     guessingGame(); 

Независимо от того, вводить ли я значение меньше, то ответ (который 7) или выше, он всегда будет говорить Что я делаю не так? Благодаря!

EDIT: Я также знаю, что мой код может быть невероятно ошибочным/плохо написанным и будет любить любую критику/улучшения.

+0

Добавьте строку 'global guess' в начало функции' guessingGame'. –

+0

@ 0O0O0O0 Отступы отлично смотрятся на меня. Это программа для угадывания числа, поэтому они, несомненно, пытаются обновить переменную 'guess', вызывая' guessingGame' каждый раз, когда пользователь вводит неверный ввод. –

ответ

0

Переменная guess, которую вы редактируете в guessingGame, не совпадает с тем, который вы сравниваете во время цикла while.

Добавление global guess в начало guessingGame Функция должна решить эту проблему.

Для дальнейшего использования, если что-то не ведет себя, часто полезно печатать переменные на разных этапах, чтобы узнать, что это такое. (для более крупных программ отладчик более полезен, но на таких вещах печать прекрасна).

Edit: относительно критики/улучшения комментарий:

  • функции должны быть названы после того, что они делают. guessingGame следует называть чем-то вроде updateUserGuess. Вместо того, чтобы полагаться на глобальные переменные, я думаю, что я сделаю эту функцию возвращенной догадкой и присваиваю значение переменной угадывания вне функции.

  • elif состояние не требуется. Если предположение не < answer и не равно она должна быть выше

  • вы называете guessingGame ли выше или ниже догадка, поэтому он может быть перемещен из если/иначе

  • вы отливку guess до int каждый раз, когда вы его используете (в функции guessingGame, а затем снова в каждом из условий). В этом нет ничего плохого, но это необязательно. Если он хранится как int, используйте его как один.

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