我在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":
答案 0 :(得分: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 ;)")
这会创建一个包含所需名称的元组并执行成员资格测试。
1正如delnan在评论中指出的那样,这适用于所有写得很好的集合。也就是说,如果您实现自定义集合类,请确保它在为空时为false。
答案 1 :(得分:7)
除了空字符串''
之外,字符串将全部评估为True
(请参阅this page for a full list of values of all types that evaluate to False
。这遵循许多其他编程语言的逻辑(除了一些还评估字符串,如{{1} 1}},'0'
等等到'false'
)。做什么的确切决定有点武断,但做出的选择可以解释为允许使用强制转换作为一种简单的方法测试空(默认或未填充)字符串。
您始终可以使用False
功能将任何类型的演员强制强制为bool
。
bool()
答案 2 :(得分:2)
http://docs.python.org/library/stdtypes.html#truth-value-testing
“......所有其他值都被认为是真的 - 所以很多类型的对象都是真的。”
答案 3 :(得分:2)
在Python中,空字符串被视为False
,否则被视为True
。
您可以使用in
运算符:
if name in ("Kamran","Samaneh"):
print("That is a nice name")
else:
print("You have a boring name ;)")
答案 4 :(得分:0)
非空字符串为True,是的。空的是假的。这非常方便。
答案 5 :(得分:-2)
显然,必须是:
name = raw_input("what is your name?")
不
name = input("what is your name?")
你写的是:
if (name == "Kamran" or "Samaneh")
另一个好的表达是:
if name == ("Kamran" or "Samaneh")
但我也更喜欢名字(“Kamran”或“Samaneh”)已经显示
顺便说一下,可写:
print("That is a nice name" if raw_input("what is your name?") in ("Kamran","Samaneh")
else "You have a boring name ;)")