为什么只有当or条件在括号之间时它才能正确执行?

2024-10-02 00:32:55 发布

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

def is_devisable(n,m): #checks divisibility
    if n%m==0:
        return True
    return False




def is_devisable23n8(x): #checks if x is devisable by 2 or 3 and not 8
    if is_devisable(x,8)==False and is_devisable(x,3)==True or is_devisable(x,2)==True:
    return 'Yes'
return 'No'

is_devisable23n8(16)
>>>Yes

但是如果我们给or条件加上括号:

#if the 2nd fn is with brackets:
def is_devisable23n8(x): #checks if x is devisable by 2 or 3 and not 8
    if is_devisable(x,8)==False and (is_devisable(x,3)==True or is_devisable(x,2)==True):
    return 'Yes'
return 'No'
is_devisable23n8(16)
>>> No

为什么它只能用括号正确执行?Python似乎忽略了if语句(is_devisable(x,8)==False)中的第一个条件?Python如何处理andif语句,这些语句的条件包括orand在同一行上


Tags: orandnofalsetruereturnifis
1条回答
网友
1楼 · 发布于 2024-10-02 00:32:55

在布尔算术中,and类似于乘法,or类似于加法。乘法优先于加法,所以and优先于or。这意味着and操作将在or之前求值。。。除非在or周围加上括号,并强制首先对其求值,就像您所做的那样。换句话说,您的第一个示例与以下示例相同:

if (is_divisible(x, 8) == False and is_divisible(x, 3) == True) or is_divisible(x, 2) == True:

一般来说,我喜欢使用比我严格需要的更多的括号,所以我不必记住哪个操作符具有优先权,最终不得不维护我的代码的可怜的sap(通常是我的未来版本)也不必记住

顺便说一下,您不需要== False== True部分。你可以写:

if not is_divisible(x, 8) and (is_divisible(x, 3) or is_divisible(x, 2)):

事实上,这就是命名一个函数的要点,比如is_divisibleif is_divisible(...)读起来相当不错。出于类似的原因,我冒昧地修改了“可除”的拼写

相关问题 更多 >

    热门问题