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如何处理and
if
语句,这些语句的条件包括or
和and
在同一行上
在布尔算术中,
and
类似于乘法,or
类似于加法。乘法优先于加法,所以and
优先于or
。这意味着and
操作将在or
之前求值。。。除非在or
周围加上括号,并强制首先对其求值,就像您所做的那样。换句话说,您的第一个示例与以下示例相同:一般来说,我喜欢使用比我严格需要的更多的括号,所以我不必记住哪个操作符具有优先权,最终不得不维护我的代码的可怜的sap(通常是我的未来版本)也不必记住
顺便说一下,您不需要
== False
和== True
部分。你可以写:事实上,这就是命名一个函数的要点,比如
is_divisible
if is_divisible(...)
读起来相当不错。出于类似的原因,我冒昧地修改了“可除”的拼写相关问题 更多 >
编程相关推荐