Въпросът ми е, защо тези изрази са фалшиви?
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
Изразът работи добре.
Отговори:
9 за отговор № 1Това твърдение:
num = raw_input("Choose a number: ")
прави num
а низ, а не число, въпреки подвеждащото му име. Случва се така, че Python 2 ви позволява да сравнявате низове с числа и във вашата версия разглежда всички низове, по-големи от всички числа ( съдържание на низа не играят роля).
употреба num = int(num)
да направите цяло число (и не забравяйте да използвате опит / освен да уловите възможни грешки, когато потребителят е въвел нещо различно от число!), преди да започнете да сравнявате.
(В Python 3 името на функцията се променя от raw_input
да се input
, и тя все още връща низове; обаче в Python 3 сравняването на низ с число се счита за грешка, така че ще получите по-скоро изключение True
или False
във всеки ваш опит за сравнение).
3 за отговор № 2
Променливата num
всъщност не съдържа номера 5
; тя съдържа низ "5"
, Тъй като Python е силно набран, 5 == "5"
е False
, Опитайте първо да го преобразувате в цяло число:
>>> print (int(num) < 18)
True
2 за отговор № 3
num
е низ. Не можете смислено да сравнявате низ с цяло число и низът никога не е равен на цяло число (така == връща невярно и <
и >
върнете каквото искат). Причината, че <
и >
не хвърляйте грешка (преди python 3), когато сравнявате низове и цели числа, е да можете да сортирате разнородни списъци.
1 за отговор № 4
Опитвам num = float(raw_input("Choose..."))
Вие оценявате низ в булевите си изрази.