Python If-Statement总是评估为true?

Python If-Statement always evaluates to true?

本问题已经有最佳答案,请猛点这里访问。

我是Python的新手,并决定尝试一些基础知识。

为什么这总是评估为真? 在UserInput中键入"False"应该评估为False?

1
2
3
4
5
true_or_false=input("Is it true or false?")
if true_or_false:
    print("It's true")
if not true_or_false:
    print("Well,it is not true")

使用最新的Python版本(3.smth)


<5233>

将给变量true_or_false一个字符串值。

1
if true_or_false

将测试是否为空字符串。

解决方案是将字符串与字符串值进行比较:

1
if true_or_false == 'True'

如果你想用大写和小写字母来防止错误,你可以这样做:

1
if true_or_false.lower() == 'true'

if条件评估传递给它的对象的"真实性":

1
2
if object:
    ...

是相同的:

1
2
if bool(object):
    ...

您将看到任何长度大于0的字符串的真实性值True

1
2
3
4
5
In [82]: bool('True')
Out[82]: True

In [83]: bool('False')
Out[83]: True

实质上,您需要将if更改为:

1
2
3
if string == 'True':
    ...
elif string == 'False':

在比较中使用字符串时,除非您知道自己在做什么,否则请使用==运算符。

另外,了解一些其他python内置函数的真实性很有用:

1
2
3
4
5
6
7
8
9
10
11
In [84]: bool(None)
Out[84]: False

In [85]: bool({})
Out[85]: False

In [86]: bool([])
Out[86]: False

In [87]: bool(['a'])
Out[87]: True


python中的字符串总是计算为True,除非它们是空的。 您需要检查字符串是否等于"True"