如何简化if语句中的多个或条件?

如何简化if语句中的多个或条件?,第1张

概述所以我想写这个: if x % 2 == 0 or x % 3 == 0 or x % 5 == 0 or x % 7 == 0: 但是这样: if x % (2 or 3 or 5 or 7) == 0: 我该如何以正确的方式写出来? 或者是一个布尔运算符.它在左参数上调用bool并查看结果是否为True,如果是,则返回左参数,否则返回正确的参数,因此不能执行x%(1或2或3),因为它的计算结果 所以我想写这个:

if x % 2 == 0 or x % 3 == 0 or x % 5 == 0 or x % 7 == 0:

但是这样:

if x % (2 or 3 or 5 or 7) == 0:

我该如何以正确的方式写出来?

解决方法 或者是一个布尔运算符.它在左参数上调用bool并查看结果是否为True,如果是,则返回左参数,否则返回正确的参数,因此不能执行x%(1或2或3),因为它的计算结果为x %1从1或2或3 == 1:

>>> True or FalseTrue>>> False or TrueTrue>>> False or FalseFalse>>> 1 or False   # all numbers != 0 are "true"1>>> bool(1)True>>> 1 or 2 or 3   #(1 or 2) or 3 == 1 or 3 == 11

每当您有多个条件时,您可以尝试使用anyall来减少它们.

我们认为任何([a,b,c,d])等于a或b或c或d,而所有([a,d])等同于a和b以及c和d除外他们总是回归真或假.

例如:

if any(x%i == 0 for i in (2,3,5,7)):

等价(从0开始,如果唯一的错误数字== 0相当于没有):

if any(not x%i for i in (2,7)):

等价的:

if not all(x%i for i in (2,7))

请记住(de Morgan法:不是或不是b ==不是(a和b)):

any(not p for p in some_List) == not all(p for p in some_List)

请注意,使用生成器表达式会导致任何和所有短路,因此不会评估所有条件.看看之间的区别:

>>> any(1/x for x in (1,0))True>>> 1 or 1/01

和:

>>> any([1/x for x in (1,0)])Traceback (most recent call last):  file "<stdin>",line 1,in <module>  file "<stdin>",in <Listcomp>ZerodivisionError: division by zero>>> 1/0 or 1Traceback (most recent call last):  file "<stdin>",in <module>ZerodivisionError: division by zero

在最后一个示例中,在调用any之前评估1/0.

总结

以上是内存溢出为你收集整理的如何简化if语句中的多个或条件?全部内容,希望文章能够帮你解决如何简化if语句中的多个或条件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193622.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存