为什么python中的这个逻辑表达式是假的?

为什么python中的这个逻辑表达式是假的?,python,expression,Python,Expression,我的问题是,为什么这些表达是错误的 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

我的问题是,为什么这些表达是错误的

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
表达式工作正常。

尝试
num=float(原始输入(“选择…”))

您正在计算布尔表达式中的字符串。

此语句:

num = raw_input("Choose a number: ")
使
num
成为一个字符串,而不是一个数字,尽管它的名称有误导性。Python2允许您将字符串与数字进行比较,并且在您的版本中,考虑所有大于所有数字的字符串(字符串的内容不起作用)

在开始比较之前,请使用
num=int(num)
生成一个整数(并确保使用try/except捕捉用户键入的数字以外的内容时可能出现的错误!)


(在Python3中,函数名从
raw_input
更改为
input
,它仍然返回字符串;但是在Python3中,将字符串与数字进行比较被视为错误,因此在每次比较尝试中都会得到异常,而不是
True
False
).

变量
num
实际上不包含数字
5
;它包含字符串
“5”
。因为Python是强类型的,
5==“5”
False
。首先尝试将其转换为整数:

>>> print (int(num) < 18)
True
打印(整数(num)<18) 真的
num
是一个字符串。您无法有意义地将字符串与整数进行比较,而且字符串永远不等于整数(因此==返回false,并且
返回他们想要的任何内容)。
不抛出错误的原因(在python 3之前)当您比较字符串和整数时,可以对异构列表进行排序。

请注意:如果您在交互式控制台中使用
num
而不是
print num
,您会立即注意到错误,因为它会打印
'5'
而不是
5
>>> print (int(num) < 18)
True