"or" 运算符在 Python 查询中
"or" operator in Python query
我是 Python 的初学者,试图结合我目前所学的一切来制作一个简单的程序。在这个问题中,程序本身不是问题,而是它的一个特定部分,我已经解决了这个问题,但想深入了解为什么会这样。
def printresults (answer):
if answer == "y" or "Y":
print ("Yes")
else:
print ("No")
在上面的例子中,我已经设法将此函数设置为 运行,其中“N”作为 'answer'。我遇到的问题是它会 运行 第一个 if 分支,在这种情况下打印“是”,尽管它不是“y”或“Y”。
从那以后,我通过在函数中创建一个新变量并使用 lower() 方法只做出一种可能性,然后简单地要求它确定它是否为“y”来解决这个问题。
def printresults (answer):
lwranswer = answer.lower()
if lwranswer == "y":
print ("Yes")
else:
print ("No")
因此我怀疑问题出在我以某种方式滥用“或”运算符 - 我只是不知道如何或为什么。任何见解将不胜感激。
谢谢
请注意,该程序不会简单地 return 是或否,但我让它打印这些以进行故障排除并查看它正在使用哪个分支。
这里有两个选项,取消 or
但这需要完整的子句:
if answer == "y" or answer == "Y":
或使用 in
和集合(集合效果最好,但在这种情况下元组和列表也是有效的替代方案):
if answer in {"y", "Y"}:
使用 or
或 and
运算符时。您还需要指定其他子句。
if answer == "y" or answer == "Y":
希望这能回答您的问题。
让我们快速分析一下原因:
answer == 'y' or 'Y'
没有按您预期的方式工作。
表达式计算如下:
(answer == 'y') or 'Y'
因为 ==
的优先级高于 or
.
answer == 'y'
部分按预期运行,即如果 answer
为 'y'
则计算为 True
,否则计算为 False
。
现在,x or y
operates “如果 x 为假,则为 y,否则为 x”。
对于non-boolean个参数,比如字符串,True
/False
的概念扩展为.
因此,当answer
为'y'
时,returns True
符合预期,而当answer
为时'y'
,它returns'Y'
,也就是Truthy,不管answer
的值实际上是'Y'
与否。
同样,如果你要计算 'y' or 'Y'
,你会得到
'y'
因为 'y'
是 Truthy.
这意味着您不能简单地使用括号让上面的表达式按照您预期的方式运行。
实现预期行为的推荐方法是:
answer in {'y', 'Y'}
有关“如何针对多个值测试变量”的全面讨论,请参阅How to test multiple variables against a value?,除了交换变量和值的作用, 正是您所需要的。
我是 Python 的初学者,试图结合我目前所学的一切来制作一个简单的程序。在这个问题中,程序本身不是问题,而是它的一个特定部分,我已经解决了这个问题,但想深入了解为什么会这样。
def printresults (answer):
if answer == "y" or "Y":
print ("Yes")
else:
print ("No")
在上面的例子中,我已经设法将此函数设置为 运行,其中“N”作为 'answer'。我遇到的问题是它会 运行 第一个 if 分支,在这种情况下打印“是”,尽管它不是“y”或“Y”。
从那以后,我通过在函数中创建一个新变量并使用 lower() 方法只做出一种可能性,然后简单地要求它确定它是否为“y”来解决这个问题。
def printresults (answer):
lwranswer = answer.lower()
if lwranswer == "y":
print ("Yes")
else:
print ("No")
因此我怀疑问题出在我以某种方式滥用“或”运算符 - 我只是不知道如何或为什么。任何见解将不胜感激。
谢谢
请注意,该程序不会简单地 return 是或否,但我让它打印这些以进行故障排除并查看它正在使用哪个分支。
这里有两个选项,取消 or
但这需要完整的子句:
if answer == "y" or answer == "Y":
或使用 in
和集合(集合效果最好,但在这种情况下元组和列表也是有效的替代方案):
if answer in {"y", "Y"}:
使用 or
或 and
运算符时。您还需要指定其他子句。
if answer == "y" or answer == "Y":
希望这能回答您的问题。
让我们快速分析一下原因:
answer == 'y' or 'Y'
没有按您预期的方式工作。
表达式计算如下:
(answer == 'y') or 'Y'
因为 ==
的优先级高于 or
.
answer == 'y'
部分按预期运行,即如果 answer
为 'y'
则计算为 True
,否则计算为 False
。
现在,x or y
operates “如果 x 为假,则为 y,否则为 x”。
对于non-boolean个参数,比如字符串,True
/False
的概念扩展为
因此,当answer
为'y'
时,returns True
符合预期,而当answer
为时'y'
,它returns'Y'
,也就是Truthy,不管answer
的值实际上是'Y'
与否。
同样,如果你要计算 'y' or 'Y'
,你会得到
'y'
因为 'y'
是 Truthy.
这意味着您不能简单地使用括号让上面的表达式按照您预期的方式运行。
实现预期行为的推荐方法是:
answer in {'y', 'Y'}
有关“如何针对多个值测试变量”的全面讨论,请参阅How to test multiple variables against a value?,除了交换变量和值的作用, 正是您所需要的。