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

时间:2010-04-11 16:16:35

标签: 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 num
5
>>> print ( num < 18 )
False
>>> print ( num == 5 )
False

因为如果我试试这个:

>>> print ( num > 0 )
True

表达式正常。

4 个答案:

答案 0 :(得分:9)

本声明:

num = raw_input("Choose a number: ")

使num成为字符串,而不是数字,尽管它具有误导性的名称。事实上,Python 2允许您将字符串与数字进行比较,并且在您的版本中认为所有字符串都大于所有数字(字符串的内容不起作用)。

使用num = int(num)创建一个整数(并且在开始比较之前,确保使用try / except来捕获用户输入的数字以外的其他错误!)。

(在Python 3中,函数的名称从raw_input更改为input,并且它仍然返回字符串;但是在Python 3中,将字符串与数字进行比较被视为错误,因此您将获得在每次比较尝试中都是例外,而不是TrueFalse

答案 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..."))

您正在评估布尔表达式中的字符串。