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

Lob*_*stw 6 python while-loop

变量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:
        ...
Run Code Online (Sandbox Code Playgroud)

kin*_*all 10

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

conds = {
    0: lambda: condition_1,
    1: lambda: condition_1 or condition_2,
    2: lambda: condition_1 or condition_2 or condition_3
}
Run Code Online (Sandbox Code Playgroud)

然后:

while conds[a]():
    # do stuff
Run Code Online (Sandbox Code Playgroud)

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

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

conds = [
     lambda: condition_1,
     lambda: conds[0]() or condition_2,
     lambda: conds[1]() or condition_3
]
Run Code Online (Sandbox Code Playgroud)

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

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

while any(cond() for cond in conds[:a+1]):
    # do stuff
Run Code Online (Sandbox Code Playgroud)

  • +1是一个聪明而简单的解决方案.但是,您可能想要指定lambda的原因 - 如果我正确解释,那是因为不使用它们会导致布尔值在字典初始化时得到修复,对吗? (2认同)