为什么使用“OR”检查变量与多个值时只检查第一个值?[重复]
- 2025-04-10 09:46:00
- admin 原创
- 18
问题描述:
我想检查一个变量是否具有多个值之一。我很困惑为什么or
在这种情况下不起作用。我正在按照给出示例的教程进行操作if (a or b):
,但当我尝试执行此操作时,它仅针对第一个值检查变量。我的检查有什么问题?
name = raw_input('Please type in your name:')
if len(name) < 5:
print "Your name has fewer than 5 characters"
elif len(name) == 5:
print "Your name has exactly 5 characters"
if name == ("Jesse" or "jesse"):
print "Hey Jesse!"
else:
print "Your name has greater than 5 characters"
解决方案 1:
("Jesse" or "jesse")
上述表达式测试 是否"Jesse"
计算为True
。如果是,则表达式将返回它;否则,它将返回"jesse"
。该表达式相当于编写:
"Jesse" if "Jesse" else "jesse"
由于"Jesse"
它是一个非空字符串,因此它总是会被计算为True
并因此被返回:
>>> bool("Jesse") # Non-empty strings evaluate to True in Python
True
>>> bool("") # Empty strings evaluate to False
False
>>>
>>> ("Jesse" or "jesse")
'Jesse'
>>> ("" or "jesse")
'jesse'
>>>
这意味着表达式:
name == ("Jesse" or "jesse")
基本上相当于这样写:
name == "Jesse"
为了解决您的问题,您可以使用in
运算符:
# Test whether the value of name can be found in the tuple ("Jesse", "jesse")
if name in ("Jesse", "jesse"):
name
或者,您可以将with的值小写str.lower
,然后"jesse"
直接将其与 进行比较:
# This will also handle inputs such as "JeSSe", "jESSE", "JESSE", etc.
if name.lower() == "jesse":
解决方案 2:
if name in ("Jesse", "jesse"):
才是正确的做法。
但是,如果你想使用or
,语句将是
if name == 'Jesse' or name == 'jesse':
>>> ("Jesse" or "jesse")
'Jesse'
计算结果为,因此当您执行 时'Jesse'
,本质上并不是在测试,因为它仅测试 是否等于,而不测试,正如您所观察到的。'jesse'
`if name == ("Jesse" or "jesse")'Jesse'
'jesse'`
解决方案 3:
如果您想要不区分大小写的比较,请使用lower
或upper
:
if name.lower() == "jesse":
解决方案 4:
如果为真,则运算or
符返回第一个操作数,否则返回第二个操作数。因此,在您的情况下,您的测试相当于if name == "Jesse"
。
正确的应用or
是:
if (name == "Jesse") or (name == "jesse"):
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD