我的问题是,为什么这些表达式是假的?
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
表达式正常。
答案 0 :(得分:9)
本声明:
num = raw_input("Choose a number: ")
使num
成为字符串,而不是数字,尽管它具有误导性的名称。事实上,Python 2允许您将字符串与数字进行比较,并且在您的版本中认为所有字符串都大于所有数字(字符串的内容不起作用)。
使用num = int(num)
创建一个整数(并且在开始比较之前,确保使用try / except来捕获用户输入的数字以外的其他错误!)。
(在Python 3中,函数的名称从raw_input
更改为input
,并且它仍然返回字符串;但是在Python 3中,将字符串与数字进行比较被视为错误,因此您将获得在每次比较尝试中都是例外,而不是True
或False
。
答案 1 :(得分:3)
变量num
实际上并不包含数字5
;它包含字符串"5"
。由于Python是强类型的,5 == "5"
是False
。首先尝试将其转换为整数:
>>> print (int(num) < 18)
True
答案 2 :(得分:2)
num
是一个字符串。你不能有意义地将一个字符串与一个整数进行比较,一个字符串永远不会等于一个整数(所以==返回false而<
和>
返回他们想要的任何东西)。在比较字符串和整数时,<
和>
不会抛出错误(在python 3之前)的原因是能够对异构列表进行排序。
答案 3 :(得分:1)
尝试num = float(raw_input("Choose..."))
您正在评估布尔表达式中的字符串。