当前位置: 首页 > 面试题库 >

为什么用`OR`对照多个值检查变量仅检查第一个值?

江温书
2023-03-14
问题内容

我想检查一个变量是否具有多个值之一。我对为什么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"

问题答案:

(“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"):

或者,您可以小写namewith的值,str.lower然后将其"jesse"直接与进行比较:

# This will also handle inputs such as "JeSSe", "jESSE", "JESSE", etc.
if name.lower() == "jesse":


 类似资料:
  • 问题内容: 我有一个filename(),然后需要用“-” 分配给文件类型。目前,无论文件类型如何,我总是会得到。 为什么使用OR运算符的if语句不起作用? 问题答案: 该逻辑 (OR)运算符 如您预期的工作不工作。该运营商始终计算结果为布尔TRUE或FALSE。因此,在您的示例中,您的字符串将转换为布尔值,然后进行比较。 如果声明: 归结为: 要解决此问题并使代码按您希望的方式工作,可以使用其他

  • 我的程序中有一个变量,它可以从值集中取任何值 我的目标是只在不是、、或时执行一些语句。 我试过了, > 对于类C语言(等式运算符比较实际字符串值;例如C#、javascript、php) 对于类Pascal语言(如plsql) 条件中的语句总是被执行。我做错什么了吗?

  • 问题内容: 我有这种方法,可以在登录前检查用户名和密码。现在,我的for循环仅检查第一个项目,它发现第一个项目不满足第一个条件,因此与其去检查第二个项目,它只是中断并返回null。 为什么会这样? 这是我的方法: 问题答案: 因此,请尝试此代码。

  • 通常,我可以看到如下代码结构: 我想知道是否有任何广泛使用的库(Google、Apache等)可以同时检查多个对象的空性,例如: 或 更新: > 我完全知道怎么自己写 我知道这可能是程序结构不佳的结果,但在这里不是个案 让我们使它更具挑战性,并用这样的内容替换原始示例: 更新2: 我已经为Apache Commons Lang库创建了一个pull请求,以修复这个漏洞: 问题:https://iss