我严重睡眠不足,我需要帮助重写这个小的Python逻辑
for _ in range(100):
if a:
continue
elif b:
continue
elif c and d:
continue
else:
e()
我想要像
这样的东西if (some_exprt of a,b,c,d):
e()
我得到的是:
if not a and not b and (not c or not d):
e()
但我真的不知道这是否正确,我是对的吗?
答案 0 :(得分:6)
从else
分支 匹配的条件开始。它是a
,b
或c and d
中的一个,因此您需要在此使用or
和not
来表达else
1}}原始代码的分支将被选中:
if not (a or b or (c and d)):
e()
然后,您可以通过应用one of De Morgan's laws将not
带入括号,将前面的测试更详尽地表达为:
if not a and not b and not (c and d):
e()
然后可以进一步扩展到:
if not a and not b and (not c or not d):
e()
这是你自己已经扩展到的。但我发现第一个版本更具可读性。
答案 1 :(得分:1)
continue无法在if语句中运行。所以我假设你在循环中运行它(while或for)。试试这个:
#whatever loop
if not(a or b or (c and d)):
e()
没有not的第二种方法将是:
if a or b or (c and d):
continue
else:
e()
正如M. Martjin Peters在评论中所解释的那样,第二种方法中的其他方法并不是必需的。您可以删除else并在if块之外移动e()。但是,在我看来,if之后的else会使代码更具可读性。
第二种方法也可以写成:
if a or b or (c and d):
continue
e()
答案 2 :(得分:1)
if not any((a, b, (c and d))):
e()