Угадай число, правда или ложь?питон - PullRequest
0 голосов
/ 02 апреля 2011

Я хочу присвоить что-то значение, а затем попытаться заставить кого-то угадать это значение.Я попробовал что-то в этом духе, но, похоже, не могу заставить его работать ...:

   foo = 1
   guessfoo = input('Guess my number: ')
   if foo == guessfoo:
       print('Well done, You guessed it!')
   if foo != guessfoo:
       print('haha, fail.')

Почему это не работает?И как мне это делать?Я новичок в этом, пожалуйста, помогите!

Ответы [ 6 ]

4 голосов
/ 02 апреля 2011

С питоном версия 3 :

input () возвращает объект 'str' (строка). Строка сравнивается с целым числом, возвращает False:

1 == '1'
False

Вы должны привести свой вклад так:

guessfoo = int(input('Guess my number: '))

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

Полный пример кода:

try:
    foo = 1
    guessfoo = int(input('Guess my number: '))
    if foo == guessfoo:
        print('Well done, You guessed it!')
    else:
        print('haha, fail.')
except ValueError:
    # cannot cast your input
    pass

EDIT:

С питоном версия 2 :

Спасибо за этот комментарий:

В предыдущих версиях input считывал строку, поэтому если пользователь набрал 1, input вернул int.

Ouput или ваш оригинальный код:

$ python2 test.py 
Guess my number: 1
Well done, You guessed it!
0 голосов
/ 02 апреля 2011

Кроме того, вы должны использовать два разных, если? не должно ли это быть что-то вроде

if foo == guessfoo:
   print('Well done, you guessed it!')
else:
   print('haha, fail.')
0 голосов
/ 02 апреля 2011

Похоже, что первой проблемой будет бесконечный цикл, поскольку условие, которое вы проверяете на каждой итерации, всегда будет соответствовать приведенному выше коду. Когда вы зацикливаетесь, вы должны убедиться, что изменили что-то, что приблизит зацикливание к этому состоянию. Для начала ваш код должен выглядеть так:

loop = 1
while loop == 1:
   foo = 1
   guessfoo = input('Guess my number: ')
   if foo == guessfoo:
       print('Well done, You guessed it!')
       loop = 0
   if foo != guessfoo:
       print('Oh no, try again')

Это заставит цикл завершиться, если число действительно угадано.

Следующая проблема состоит в том, что input возвращает строку, поэтому проверка, чтобы увидеть, равно ли введенное число ожидаемому числу, всегда будет неудачной. В python используйте функцию int() для преобразования строки в число, чтобы строка выглядела следующим образом:

guessfoo = int(input('Guess my number: '))

В этот момент у вас должен быть прилично работающий цикл. Тем не менее, есть несколько вещей, которые вы можете сделать, чтобы сделать ваш код проще. Вот несколько советов, начиная с самых простых настроек и переходя к более чистому коду.

Первым шагом может быть использование if...else, чтобы убедиться, что выполняется только одно условие, и вам нужно только один раз проверить значение foo. Если условие истинно, выполняется первая ветвь; в случае неудачи выполнение переходит к блоку else.

loop = 1
while loop == 1:
   foo = 1
   guessfoo = int(input('Guess my number: '))
   if foo == guessfoo:
       print('Well done, You guessed it!')
       loop = 0
   else:
       print('Oh no, try again') 

Это работает, но мы также можем переместить проверку правильности результата в условии цикла. Таким образом, программа зацикливается только до тех пор, пока не отобразится число:

foo = 1
guessfoo = 0

while foo != guessfoo:
    guessfoo = int( input( 'Guess my number: ' )

    if guessfoo != foo:
        print( 'Oh no, try again' )

print( 'Well done, You guessed it!' )

Теперь сообщение об успехе будет отображаться только при foo == guessfoo. Этот цикл немного понятнее и проще.

Как новичок, вы выбрали отличное место, чтобы обратиться за помощью! Добро пожаловать в StackOverflow!

0 голосов
/ 02 апреля 2011
import random

try:
    inp = raw_input   # Python 2.x
except NameError:
    inp = input       # Python 3.x

foo = random.randint(1,10)
while True:
    guess = int(inp('Guess my number: '))
    if guess < foo:
        print('Too low!')
    elif guess > foo:
        print('Too high!')
    else:
        print('You got it!')
        break
0 голосов
/ 02 апреля 2011

Поскольку целые числа (foo) не являются строками (результат input ()). Если вы думаете, что Python ведет себя как PHP или Perl, то вы не правы

1 - это нечто совершенно отличное от «1».

Вы должны либо преобразовать строку, используя int (..) в int, либо проверить 'foo' в виде строки.

0 голосов
/ 02 апреля 2011

В настоящее время у вас нет условий для остановки цикла. Вы просто печатаете вещи. Введите break после того, как вы угадали номер, или установите loop на значение, отличное от 1.

...