&引用;或;Python查询中的运算符

&引用;或;Python查询中的运算符,python,operator-keyword,Python,Operator Keyword,我是Python的初学者,试图结合我迄今为止所学的一切制作一个简单的程序。在这个问题上,程序本身不是问题,而是它的一个特定部分,我一直在研究这个问题,但我想了解一下为什么会发生这种情况 def printresults (answer): if answer == "y" or "Y": print ("Yes") else: print ("No") 在上面的例子中

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

def printresults (answer):
    if answer == "y" or "Y":
        print ("Yes")
    else:
        print ("No")
在上面的例子中,我已经设法让这个函数以“N”作为“答案”运行。我面临的问题是,它将运行第一个if分支,在本例中打印“Yes”,尽管它不是“y”或“y”

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

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

谢谢


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

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

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

如果回答为{“y”,“y”}:

这里有两个选项,unsing
,但这需要完整的条款:

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

如果回答为{“y”,“y”}:

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

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

希望这能回答您的问题。

当使用
操作符时。您还需要指定另一个子句

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

希望这能回答您的问题。

让我们快速分析原因:

answer == 'y' or 'Y'
没有按您预期的方式工作

表达式的计算如下所示:

(answer == 'y') or 'Y'
因为
==
的优先级高于

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

现在,
x或y
“如果x为假,那么y,否则x”。 对于非布尔参数,例如字符串,
True
/
False
的概念扩展到

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

类似地,如果您要计算“y”或“y”
,您将得到 因为
'y'
是真实的

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

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

answer in {'y', 'Y'}

有关“如何根据多个值测试变量”的全面讨论,请参阅,除了交换变量和值的角色外,这正是您需要的。

让我们快速分析原因:

answer == 'y' or 'Y'
没有按您预期的方式工作

表达式的计算如下所示:

(answer == 'y') or 'Y'
因为
==
的优先级高于

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

现在,
x或y
“如果x为假,那么y,否则x”。 对于非布尔参数,例如字符串,
True
/
False
的概念扩展到

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

类似地,如果您要计算“y”或“y”
,您将得到 因为
'y'
是真实的

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

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

answer in {'y', 'Y'}

有关“如何根据多个值测试变量”的全面讨论,请参阅,除了交换变量和值的角色外,这正是您需要的。

这是否回答了您的问题?这回答了你的问题吗?最好使用
集合
,例如,{y',y'}
集合中的
答案不是序列。它们只是收藏品。另请参见。最好使用
集合
,例如,{y',y'}
集合中的
答案不是序列。它们只是收藏品。另见。