The general way to do what other languages ββdo with the switch is to create a dictionary containing a function for each of your cases:
conds = { 0: lambda: condition_1, 1: lambda: condition_1 or condition_2, 2: lambda: condition_1 or condition_2 or condition_3 }
Then:
while conds[a](): # do stuff
Using lambdas (or named functions if your conditions are especially complex), the corresponding condition can be evaluated every time through the loop, and not once, when the dictionary is defined.
In this simple case, when your a has sequential integer values ββstarting at 0, you can use a list and save a bit of input. For further simplification, you can define each of your conditions in terms of the previous one, since you simply add a condition every time:
conds = [ lambda: condition_1, lambda: conds[0]() or condition_2, lambda: conds[1]() or condition_3 ]
Or, as Julien suggested in a comment:
conds = [ lambda: condition_1, lambda: condition_2, lambda: condition_3 ] while any(cond() for cond in conds[:a+1]):
source share