if-else-if-else子句序列的逻辑等价性

2024-09-27 21:33:30 发布

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

我严重睡眠不足,我需要帮助重写这一小段Python逻辑

for _ in range(100):
    if a:
        continue
    elif b:
        continue
    elif c and d:
        continue
    else:
        e()

我想要一些像

^{pr2}$

我得到的是:

if not a and  not b and (not c or not d):
   e()

但我真的不知道这是否正确,对吗?在


Tags: orandinforifnotrange逻辑
3条回答
if not any((a, b, (c and d))):
    e()

continue不能在if语句内工作。所以我假设你在一个循环中运行这个(while或for)。试试这个:

#whatever loop
if not(a or b or (c and d)):
    e()

第二种不带not的方法是:

^{pr2}$

正如M.MartjinPeters在评论中所解释的,第二种方法中的else块是不必要的。可以删除else并将e()移到if块之外。然而,在我看来,if后面的else将使代码更具可读性。在

第二种方法也可以写成:

if a or b or (c and d):
    continue
e()

else分支在什么条件下开始。它应该是a,或者b,或者c and d,所以您需要在这里使用or和{}来表示原始代码的else分支的时间:

if not (a or b or (c and d)):
    e()

然后,您可以通过应用one of De Morgan's lawsnot放入括号中,将前面的测试更详细地表示为:

^{pr2}$

然后可以进一步扩展到:

if not a and not b and (not c or not d):
    e()

这就是你自己已经扩展到的。但我觉得第一个版本更具可读性。在

相关问题 更多 >

    热门问题