繁体   English   中英

有额外的循环条件......基于条件?

[英]Have extra while loop conditions … based on a condition?

变量a可以采用任意数量的值。 的值a是额外的预先定义的条件,以具有用于在while循环的量。

这可以使用多个elif语句来完成,但有更简洁的方法吗?

if a == 0:
    while condition_1:
        ...
elif a == 1:
    while condition_1 or condition_2:
        ...
elif a == 2:
    while condition_1 or condition_2 or condition_3:
        ...

使用switch语句执行其他语言操作的一般方法是创建包含每个案例的函数的字典:

conds = {
    0: lambda: condition_1,
    1: lambda: condition_1 or condition_2,
    2: lambda: condition_1 or condition_2 or condition_3
}

然后:

while conds[a]():
    # do stuff

通过使用lambdas(或条件特别复杂的命名函数),可以在每次循环时评估适当的条件,而不是在定义字典时评估一次。

在这个简单的情况下,你的a具有从0开始的连续整数值,你可以使用一个列表并保存一些输入。 为了进一步简化,您可以根据前一个条件定义每个条件,因为您每次只是添加一个条件:

conds = [
     lambda: condition_1,
     lambda: conds[0]() or condition_2,
     lambda: conds[1]() or condition_3
]

或者,正如Julien在评论中所建议的那样:

conds = [
     lambda: condition_1,
     lambda: condition_2,
     lambda: condition_3
]

while any(cond() for cond in conds[:a+1]):
    # do stuff

你尝试过这样的事情:

while (a >= 0 and condition_1) or (a >= 1 and condition_2) or (a >= 2 and condition_3) ...

你可以定义一个函数来进行评估while

def test(a):
    if a == 1:
        return condition1(...)
    elif a == 2:
        return condition2(...) or condition1(...)
    elif a == 3:
        return condition2(...) or condition1(...) or condition3(...)
    else:
        return False

# test(a) will check the conditions ... define additional arguments if you need them
while test(a):
    do_stuff

它确实还有elifs,但你不需要多次写while -loop。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM