在Python中“string”的逻辑值是什么?
我在Python中错误地写了这段代码:
name = input("what is your name?")
if name == "Kamran" or "Samaneh":
print("That is a nice name")
else:
print("You have a boring name ;)")
无论输入是什么,只要不是“Kamran”或“Samaneh”,它总是会打印出“那是个好名字”。
我是不是可以说它把“Samaneh”当作真的了?为什么会这样?
顺便说一下,我已经注意到我的错误了。正确的写法是:
if name == "Kamran" or name == "Samaneh":
5 个回答
2
在Python中,一个空字符串被认为是False
,而其他非空字符串则被认为是True
。
你可以使用in
这个操作符:
if name in ("Kamran","Samaneh"):
print("That is a nice name")
else:
print("You have a boring name ;)")
8
除了空字符串 ''
以外,其他的字符串在判断真假时都会被认为是 True
(想了解哪些值会被认为是 False
,可以查看这个页面)。这种判断方式和很多其他编程语言是类似的(不过有些语言会把像 '0'
、'false'
这样的字符串也当作 False
)。具体怎么判断其实有点随意,但这样做的原因是为了让我们可以简单地检查一个字符串是否为空(也就是默认的、没有内容的字符串)。
你可以随时使用 bool()
函数强制把任何类型转换成 bool
(布尔值)。
>>> bool('')
False
>>> bool('non-empty string')
True
>>> bool('0')
True
>>> bool('False')
True
>>> bool('false')
True
13
在Python(以及大多数其他编程语言)中,任何非空字符串都被认为是真值,所有非零数字、非空列表、字典、集合和元组也是如此。
你想要的功能有个更简单的写法:
name = input("what is your name?")
if name in ("Kamran", "Samaneh"):
print("That is a nice name")
else:
print("You have a boring name ;)")
这段代码会创建一个包含你想要的名字的元组,并进行成员测试。
正如delnan在评论中提到的,这个规则适用于所有写得好的集合。也就是说,如果你自己实现了一个集合类,确保它在空的时候返回假值。