Section 8.3 The while
Statement
There is another Python statement that can also be used to build an iteration. It is called the
while
statement. The
while
statement provides a much more general mechanism for iterating. Similar to the
if
statement, it uses a boolean expression to control the flow of execution. The body of while will be repeated as long as the controlling boolean expression evaluates to
True
.
The following figure shows the flow of control.
We can use the
while
loop to create any type of iteration we wish, including anything that we have previously done with a
for
loop. For example, the program in the previous section could be rewritten using
while
. Instead of relying on the
range
function to produce the numbers for our summation, we will need to produce them ourselves. To to this, we will create a variable called
aNumber
and initialize it to 1, the first number in the summation. Every iteration will add
aNumber
to the running total until all the values have been used. In order to control the iteration, we must create a boolean expression that evaluates to
True
as long as we want to keep adding values to our running total. In this case, as long as
aNumber
is less than or equal to the bound, we should keep going.
Here is a new version of the summation program that uses a while statement.
You can almost read the
while
statement as if it were in natural language. It means, while
aNumber
is less than or equal to
aBound
, continue executing the body of the loop. Within the body, each time, update
theSum
using the accumulator pattern and increment
aNumber
. After the body of the loop, we go back up to the condition of the
while
and reevaluate it. When
aNumber
becomes greater than
aBound
, the condition fails and flow of control continues to the
return
statement.
The same program in codelens will allow you to observe the flow of execution.
More formally, here is the flow of execution for a
while
statement:
Evaluate the condition, yielding False
or True
.
If the condition is False
, exit the while
statement and continue execution at the next statement.
If the condition is True
, execute each of the statements in the body and then go back to step 1.
The body consists of all of the statements below the header with the same indentation.
This type of flow is called a
loop because the third step loops back around to the top. Notice that if the condition is
False
the first time through the loop, the statements inside the loop are never executed.
The body of the loop should change the value of one or more variables so that eventually the condition becomes
False
and the loop terminates. Otherwise the loop will repeat forever. This is called an
infinite loop. An endless source of amusement for computer scientists is the observation that the directions written on the back of the shampoo bottle (lather, rinse, repeat) create an infinite loop.
In the case shown above, we can prove that the loop terminates because we know that the value of
aBound
is finite, and we can see that the value of
aNumber
increments each time through the loop, so eventually it will have to exceed
aBound
. In other cases, it is not so easy to tell.
What you will notice here is that the
while
loop is more work for you — the programmer — than the equivalent
for
loop. When using a
while
loop you have to control the loop variable yourself. You give it an initial value, test for completion, and then make sure you change something in the body so that the loop terminates.
So why have two kinds of loop if
for
looks easier? The next section,
Section 8.4 , shows an indefinite iteration where we need the extra power that we get from the
while
loop.
Checkpoint 8.3.4.
True or False: You can rewrite any for-loop as a while-loop.
True
Although the while loop uses a different syntax, it is just as powerful as a for-loop and often more flexible.
False
Often a for-loop is more natural and convenient for a task, but that same task can always be expressed using a while loop.
Checkpoint 8.3.5.
The following code contains an infinite loop. Which is the best explanation for why the loop does not terminate?
n = 10
answer = 1
while n > 0:
answer = answer + n
n = n + 1
print(answer)
n starts at 10 and is incremented by 1 each time through the loop, so it will always be positive
The loop will run as long as n is positive. In this case, we can see that n will never become non-positive.
answer starts at 1 and is incremented by n each time, so it will always be positive
While it is true that answer will always be positive, answer is not considered in the loop condition.
You cannot compare n to 0 in while loop. You must compare it to another variable.
It is perfectly valid to compare n to 0. Though indirectly, this is what causes the infinite loop.
In the while loop body, we must set n to False, and this code does not do that.
The loop condition must become False for the loop to terminate, but n by itself is not the condition in this case.
Checkpoint 8.3.6.
What is printed by this code?
n = 1
x = 2
while n < 5:
n = n + 1
x = x + 1
n = n + 2
x = x + n
print(n, x)
4 7
Setting a variable so the loop condition would be false in the middle of the loop body does not keep the variable from actually being set.
5 7
Setting a variable so the loop condition would be false in the middle of the loop body does not stop execution of statements in the rest of the loop body.
7 15
After n becomes 5 and the test would be False, but the test does not actually come until after the end of the loop - only then stopping execution of the repetition of the loop.
You have attempted
1 of
5 activities on this page.