Python 3, если операторы вызывают неправильную функцию - PullRequest
0 голосов
/ 19 ноября 2011
if action == 1:
    forage()
elif action == 2:
    forage()
else:
    display()

Не зная контекста того, что я пытаюсь сделать, вот моя проблема: всякий раз, когда я вставляю 1 или 2, он вызывает display () вместо вызова forage ().

Извинитея полагаю, что этот вопрос слишком глуп, чтобы быть материалом Stackoverflow, но мне кажется, что эта проблема очень важна, и я хочу, чтобы она была решена раз и навсегда, и, похоже, не могу найти решение.Надеюсь, вы, ребята, сможете мне помочь.

Ответы [ 4 ]

7 голосов
/ 19 ноября 2011

Это разница между Python 2 и Python 3 .В Python 2 функция input оценивает ввод строки как выражение Python и возвращает целое число 1, чтобы ваш пример работал так, как вы ожидали.В Python 3 input вернет введенную неоцененную строку, например, '1'.Итак, для Python 3 вам нужно будет проверять строковые значения, а не целочисленные.Или преобразуйте строку в целое число, используя int(), как предлагается в других ответах.

3 голосов
/ 19 ноября 2011

возможно ли, что действие - это строка '1', а не целое число 1?

0 голосов
/ 19 ноября 2011

Совет по отладке: проверьте введенные данные.

print(
    type(action), ascii(action),
    type(1), ascii(1),
    type('1'), ascii('1'),
    '1' == 1
    )

Python 2: используйте repr() вместо ascii()

0 голосов
/ 19 ноября 2011

попробовать:

action = int(input("What do you want to do? "))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...