在Python中“string”的逻辑值是什么?

9 投票
5 回答
12966 浏览
提问于 2025-04-16 09:02

我在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在评论中提到的,这个规则适用于所有写得好的集合。也就是说,如果你自己实现了一个集合类,确保它在空的时候返回假值。

撰写回答