Kam*_*ely 9 python string casting boolean
我在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 ;)")
Run Code Online (Sandbox Code Playgroud)
即使输入既不是"Kamran"也不是"Samaneh",它总是打印出"这是一个好名字".
我说它认为"Samaneh"是真的吗?为什么?
顺便说一下,我已经注意到了我的错误.正确的形式是:
if name == "Kamran" or name == "Samaneh":
Run Code Online (Sandbox Code Playgroud)
aar*_*ing 13
Python(以及大多数其他语言)中的任何非空字符串都是正确的,因为所有非零数字和非空列表,字典,集合和元组都是如此.1
做你想做的更好的方法是:
name = input("what is your name?")
if name in ("Kamran", "Samaneh"):
print("That is a nice name")
else:
print("You have a boring name ;)")
Run Code Online (Sandbox Code Playgroud)
这将创建一个包含所需名称的元组并执行成员资格测试.
1正如德尔南在评论中指出的那样,这适用于所有写得很好的集合.也就是说,如果您实现自定义集合类,请确保它为空时为false.
除了空字符串'',字符串都将计算为True(请参见本页面计算结果为所有类型的值的完整列表False.在此之前,许多其他编程语言的逻辑(除了其中一些还评估字符串一样'0','false'等来False)确切地决定做什么有些随意,但所做的选择可以解释为允许使用强制转换作为测试空(默认或未填充)字符串的简单方法.
您始终可以强制bool使用任何类型的强制转换来使用该bool()功能.
>>> bool('')
False
>>> bool('non-empty string')
True
>>> bool('0')
True
>>> bool('False')
True
>>> bool('false')
True
Run Code Online (Sandbox Code Playgroud)