Part 6
Part 6
Part 6
Control flow is where the rubber really meets the road in programming. Without it, a program
is simply a list of statements that are sequentially executed. With control flow, you can
execute certain code blocks conditionally and/or repeatedly: these basic building blocks can
be combined to create surprisingly sophisticated programs!
Here we'll cover conditional statements (including "if", "elif", and "else"), loop
statements (including "for" and "while" and the accompanying "break", "continue", and
"pass").
x = -15
if x == 0:
print(x, "is zero")
elif x > 0:
print(x, "is positive")
elif x < 0:
print(x, "is negative")
else:
print(x, "is unlike anything I've ever seen...")
-15 is negative
Note especially the use of colons (:) and whitespace to denote separate blocks of code.
Python adopts the if and else often used in other languages; its more unique keyword
is elif, a contraction of "else if". In these conditional clauses, elif and else blocks are
optional; additionally, you can optionally include as few or as many elif statements as you
would like.
for loops
Loops in Python are a way to repeatedly execute some code statement. So, for example, if
we'd like to print each of the items in a list, we can use a for loop:
In [2]:
for N in [2, 3, 5, 7]:
print(N, end=' ') # print all on same line
2 3 5 7
Notice the simplicity of the for loop: we specify the variable we want to use, the sequence we
want to loop over, and use the "in" operator to link them together in an intuitive and
readable way. More precisely, the object to the right of the "in" can be any Python iterator. An
iterator can be thought of as a generalized sequence, and we'll discuss them in Iterators.
For example, one of the most commonly-used iterators in Python is the range object, which
generates a sequence of numbers:
In [3]:
for i in range(10):
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
Note that the range starts at zero by default, and that by convention the top of the range is
not included in the output. Range objects can also have more complicated values:
In [4]:
# range from 5 to 10
list(range(5, 10))
Out[4]:
[5, 6, 7, 8, 9]
In [5]:
# range from 0 to 10 by 2
list(range(0, 10, 2))
Out[5]:
[0, 2, 4, 6, 8]
You might notice that the meaning of range arguments is very similar to the slicing syntax that
we covered in Lists.
Note that the behavior of range() is one of the differences between Python 2 and Python 3: in
Python 2, range() produces a list, while in Python 3, range() produces an iterable object.
while loops
The other type of loop in Python is a while loop, which iterates until some condition is met:
In [6]:
i = 0
while i < 10:
print(i, end=' ')
i += 1
0 1 2 3 4 5 6 7 8 9
The argument of the while loop is evaluated as a Boolean statement, and the loop is executed
until the statement evaluates to False.
Here is an example of using continue to print a string of odd numbers. In this case, the result
could be accomplished just as well with an if-else statement, but sometimes
the continue statement can be a more convenient way to express the idea you have in mind:
In [7]:
for n in range(20):
# if the remainder of n / 2 is 0, skip the rest of the loop
if n % 2 == 0:
continue
print(n, end=' ')
1 3 5 7 9 11 13 15 17 19
Here is an example of a break statement used for a less trivial task. This loop will fill a list with
all Fibonacci numbers up to a certain value:
In [8]:
a, b = 0, 1
amax = 100
L = []
while True:
(a, b) = (b, a + b)
if a > amax:
break
L.append(a)
print(L)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
Notice that we use a while True loop, which will loop forever unless we have a break
statement!
The else statement only executes if none of the factors divide the given number.
The else statement works similarly with the while loop.