3.8. while LoopsΒΆ
for Loops either iterate on the contents of a container, such as a
list or a dictionary, or until a given counter exceeds a prespecified threshold.
In contrast, a while loop runs until a specified condition is true, as shown
below.
>>> counter = 0
>>> while counter < 5:
... print counter,
... counter+=1
...
0 1 2 3 4
Warning
The above loop would run infinitely if the value of counter was not incremented in each iteration. This is a very common pitfall which the application developer should watch out for!
There are various scenarios where the flexibility of while loops proves advantageous, such as
when operating with inputs given by the user, or when checking the status of a
boolean flag. Similar to Java
or C++, Python
provides a break command to exit out of a loop early. This allows us to write loops
where the termination criterion may not be known in advance, or is pretty large
in terms of computational cost. For example:
>>> active_list = [5,9,14,23,31]
>>> counter = 0
>>> while counter < 10000:
... if(counter in active_list): break
... else: print counter,
... counter+=1
...
0 1 2 3 4
In the example above, the termination criterion can make the loop run for quite
some time. Instead, we check if the value of counter is present in active_list
and if so, we break out early. This stops the loop in just \(5\) iterations.
Python also provides a continue command to skip
all statements coming after it in a loop, as shown below.
>>> counter = 0
>>> while counter<100:
... counter+=1
... if counter in inactive_list: continue
... print counter,
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
In the example above, note that counter is incremented before the statement
with continue. If instead, we incremented counter afterwards,
then we would have encountered an infinite loop! Thus, when using continue
or while loops in general, the application developer should be extremely
mindful of such logical errors. Also note that the commands break and
continue are not specific to while loops, and can be used with for
loops as well.