Before you keep reading...
Runestone Academy can only continue if we get support from individuals like you. As a student you are well aware of the high cost of textbooks. Our mission is to provide great books to you for free, but we ask that you consider a $10 donation, more if you can or less if $10 is a burden.
Before you keep reading...
Making great stuff takes time and $$. If you appreciate the book you are reading now and want to keep quality materials free for other students please consider a donation to Runestone Academy. We ask that you consider a $10 donation, but if you can give more thats great, if $10 is too much for your budget we would be happy with whatever you can afford as a show of support.
There is another Python statement that can also be used to build an iteration. It is called 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
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
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,
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
The same program in codelens will allow you to observe the flow of execution.
More formally, here is the flow of execution for a
Evaluate the condition, yielding
If the condition is
False, exit the
whilestatement 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.
while is very close to the English “while”,
there is an important difference: In English “while X, do Y”,
we usually assume that immediately after X becomes false, we stop
with Y. In Python there is not an immediate stop: After the
initial test, any following tests come only after the execution of
the whole body, even if the condition becomes false in the middle of the loop body.
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.
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
increments each time through the loop, so eventually it will have to exceed
other cases, it is not so easy to tell.
Introduction of the while statement causes us to think about the types of iteration we have seen. The
for statement will always iterate through a sequence of values like the list of names for the party or the list of numbers created by
range. Since we know that it will iterate once for each value in the collection, it is often said that a
for loop creates a
definite iteration because we definitely know how many times we are going to iterate. On the other
while statement is dependent on a condition that needs to evaluate to
False in order
for the loop to terminate. Since we do not necessarily know when this will happen, it creates what we
call indefinite iteration. Indefinite iteration simply means that we don’t know how many times we will repeat but eventually the condition controlling the iteration will fail and the iteration will stop. (Unless we have an infinite loop which is of course a problem.)
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
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
So why have two kinds of loop if
for looks easier? The next section, Randomly Walking Turtles, shows an indefinite iteration where
we need the extra power that we get from the
This workspace is provided for your convenience. You can use this activecode window to try out anything you like.
Check your understanding