Python查询中的“or”运算符

2024-10-03 13:18:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python的初学者,试图结合我迄今为止所学的一切制作一个简单的程序。在这个问题上,程序本身不是问题,而是它的一个特定部分,我一直在研究这个问题,但我想了解一下为什么会发生这种情况

def printresults (answer):
    if answer == "y" or "Y":
        print ("Yes")
    else:
        print ("No")

在上面的例子中,我已经设法让这个函数以“N”作为“答案”运行。我面临的问题是,它将运行第一个if分支,在本例中打印“Yes”,尽管它不是“y”或“y”

此后,我在函数中创建了一个新变量,并使用lower()方法只生成一个可能性,然后简单地要求它确定它是否为“y”

def printresults (answer):
    lwranswer = answer.lower()
    if lwranswer == "y":
        print ("Yes")
    else:
        print ("No")

因此,我怀疑错误在于我不知何故误用了“或”操作符——我只是不知道如何或为什么。如有任何见解,将不胜感激

谢谢

注意,该程序不会简单地返回Yes或No,但我让它打印这些以进行故障排除,并查看它使用的是哪个分支


Tags: 函数noanswer程序ifdef分支lower
3条回答

这里有两个选项,unsingor,但这需要完整的子句:

if answer == "y" or answer == "Y":

或者使用in和集合(集合效果最好,但在这种情况下元组和列表也是有效的替代方案):

if answer in {"y", "Y"}:

让我们快速分析原因:

answer == 'y' or 'Y'

没有按您预期的方式工作

表达式的计算如下所示:

(answer == 'y') or 'Y'

因为==的优先级高于or

answer == 'y'部分的行为符合预期,即如果answer'y'则计算为True,否则计算为False

现在,^{cd8>}{a1}以这样的方式,“如果x为假,那么y,否则x”。 对于非布尔参数,例如字符串,True/False的概念扩展到Truthy/Falsy

因此,当answer'y'时,它按预期返回True,而当answer为非'y'时,它返回'Y',这是真实的,无论answer的值是否实际为'Y'

类似地,如果您要计算'y' or 'Y',您将得到 'y'因为{}是真实的

这意味着您不能简单地使用括号让上面的表达式按照您期望的方式运行

实现预期行为的推荐方法是:

answer in {'y', 'Y'}

有关“如何根据多个值测试变量”的全面讨论,请参阅How to test multiple variables against a value?,除了交换变量和值的角色外,这正是您需要的

使用orand运算符时。您还需要指定另一个子句

if answer == "y" or answer == "Y":

希望这能回答你的问题

相关问题 更多 >