Почему это логическое выражение в python False? - PullRequest
4 голосов
/ 11 апреля 2010

У меня вопрос, почему эти выражения ложны?

Python 2.6.4 (r264:75706, Dec  7 2009, 18:45:15) 
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> num = raw_input("Choose a number: ")
Choose a number: 5
>>> print num
5
>>> print ( num < 18 )
False
>>> print ( num == 5 )
False

Потому что, если я попробую это:

>>> print ( num > 0 )
True

Выражение работает отлично.

Ответы [ 4 ]

9 голосов
/ 11 апреля 2010

Это утверждение:

num = raw_input("Choose a number: ")

делает num строку , а не число, несмотря на его вводящее в заблуждение имя.Бывает, что Python 2 позволяет сравнивать строки с числами, и в вашей версии все строки считаются большими, чем все числа ( содержимое строки не играют роли).

Использование num = int(num) сделать целое число (и обязательно использовать попытку /, кроме как для отлова возможных ошибок, когда пользователь набрал что-то отличное от числа!) перед началом сравнения.

(В Python 3 имя функцииизменяется с raw_input на input и по-прежнему возвращает строки, однако в Python 3 сравнение строки с числом считается ошибкой, поэтому вы получите исключение, а не True или False в каждом из вашихпопытки сравнения).

3 голосов
/ 11 апреля 2010

Переменная num на самом деле не содержит число 5; он содержит строку "5". Поскольку Python строго типизирован, 5 == "5" равен False. Попробуйте сначала преобразовать его в целое число:

>>> print (int(num) < 18)
True
2 голосов
/ 11 апреля 2010

num - это строка. Вы не можете осмысленно сравнивать строку с целым числом, а строка никогда не равна целому числу (поэтому == возвращает false, а < и > возвращают все, что хотят). Причина, по которой < и > не выдают ошибку (до Python 3) при сравнении строк и целых чисел, заключается в возможности сортировки разнородных списков.

1 голос
/ 11 апреля 2010

Попробуйте num = float(raw_input("Choose..."))

Вы оцениваете строку в ваших логических выражениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...