For Loops
Last updated on 2023-05-02 | Edit this page
Overview
Questions
- How can I make a program do many things?
Objectives
- Explain what for loops are normally used for.
- Trace the execution of a simple (unnested) loop and correctly state the values of variables in each iteration.
- Write for loops that use the Accumulator pattern to aggregate values.
A for loop executes commands once for each value in a collection.
- Doing calculations on the values in a list one by one is as painful
as working with
pressure_001
,pressure_002
, etc. - A for loop tells Python to execute some statements once for each value in a list, a character string, or some other collection.
- “for each thing in this group, do these operations”
PYTHON
for number in [2, 3, 5]:
print(number)
- This
for
loop is equivalent to:
PYTHON
print(2)
print(3)
print(5)
- And the
for
loop’s output is:
OUTPUT
2
3
5
A for
loop is made up of a collection, a loop variable,
and a body.
PYTHON
for number in [2, 3, 5]:
print(number)
- The collection,
[2, 3, 5]
, is what the loop is being run on. - The body,
print(number)
, specifies what to do for each value in the collection. - The loop variable,
number
, is what changes for each iteration of the loop.- The “current thing”.
The first line of the for
loop must end with a colon,
and the body must be indented.
- The colon at the end of the first line signals the start of a block of statements.
- Python uses indentation rather than
{}
orbegin
/end
to show nesting.- Any consistent indentation is legal, but almost everyone uses four spaces.
PYTHON
for number in [2, 3, 5]:
print(number)
ERROR
IndentationError: expected an indented block
- Indentation is always meaningful in Python.
PYTHON
= "Jon"
firstName = "Smith" lastName
ERROR
File "<ipython-input-7-f65f2962bf9c>", line 2
lastName = "Smith"
^
IndentationError: unexpected indent
- This error can be fixed by removing the extra spaces at the beginning of the second line.
Loop variables can be called anything.
- As with all variables, loop variables are:
- Created on demand.
- Meaningless: their names can be anything at all.
PYTHON
for kitten in [2, 3, 5]:
print(kitten)
The body of a loop can contain many statements.
- But no loop should be more than a few lines long.
- Hard for human beings to keep larger chunks of code in mind.
PYTHON
= [2, 3, 5]
primes for p in primes:
= p ** 2
squared = p ** 3
cubed print(p, squared, cubed)
OUTPUT
2 4 8
3 9 27
5 25 125
Use range
to iterate over a sequence of numbers.
- The built-in function
range
produces a sequence of numbers.- Not a list: the numbers are produced on demand to make looping over large ranges more efficient.
-
range(N)
is the numbers 0..N-1- Exactly the legal indices of a list or character string of length N
PYTHON
print('a range is not a list: range(0, 3)')
for number in range(0, 3):
print(number)
OUTPUT
a range is not a list: range(0, 3)
0
1
2
The Accumulator pattern turns many values into one.
- A common pattern in programs is to:
- Initialize an accumulator variable to zero, the empty string, or the empty list.
- Update the variable with values from a collection.
PYTHON
# Sum the first 10 integers.
= 0
total for number in range(10):
= total + (number + 1)
total print(total)
OUTPUT
55
- Read
total = total + (number + 1)
as:- Add 1 to the current value of the loop variable
number
. - Add that to the current value of the accumulator variable
total
. - Assign that to
total
, replacing the current value.
- Add 1 to the current value of the loop variable
- We have to add
number + 1
becauserange
produces 0..9, not 1..10.
An IndentationError is a syntax error. Programs with syntax errors cannot be started. A program with a runtime error will start but an error will be thrown under certain conditions.
Line no | Variables |
---|---|
1 | total = 0 |
2 | total = 0 char = ‘t’ |
3 | total = 1 char = ‘t’ |
2 | total = 1 char = ‘i’ |
3 | total = 2 char = ‘i’ |
2 | total = 2 char = ‘n’ |
3 | total = 3 char = ‘n’ |
PYTHON
= "tin"
original = ""
result for char in original:
= char + result
result print(result)
PYTHON
= 0
total for word in ["red", "green", "blue"]:
= total + len(word)
total print(total)
PYTHON
= []
lengths for word in ["red", "green", "blue"]:
len(word))
lengths.append(print(lengths)
PYTHON
= ["red", "green", "blue"]
words = ""
result for word in words:
= result + word
result print(result)
PYTHON
= ""
acronym for word in ["red", "green", "blue"]:
= acronym + word[0].upper()
acronym print(acronym)
PYTHON
= 0
total = [1,2,2,5]
data = []
cumulative for number in data:
= total + number
total
cumulative.append(total)print(cumulative)
Identifying Variable Name Errors
- Read the code below and try to identify what the errors are without running it.
- Run the code and read the error message. What type of
NameError
do you think this is? Is it a string with no quotes, a misspelled variable, or a variable that should have been defined but was not? - Fix the error.
- Repeat steps 2 and 3, until you have fixed all the errors.
PYTHON
for number in range(10):
# use a if the number is a multiple of 3, otherwise use b
if (Number % 3) == 0:
= message + a
message else:
= message + "b"
message print(message)
- Python variable names are case sensitive:
number
andNumber
refer to different variables. - The variable
message
needs to be initialized as an empty string. - We want to add the string
"a"
tomessage
, not the undefined variablea
.
PYTHON
= ""
message for number in range(10):
# use a if the number is a multiple of 3, otherwise use b
if (number % 3) == 0:
= message + "a"
message else:
= message + "b"
message print(message)
This list has 4 elements and the index to access the last element in
the list is 3
.
PYTHON
= ['Spring', 'Summer', 'Fall', 'Winter']
seasons print('My favorite season is ', seasons[3])
Keypoints
- A for loop executes commands once for each value in a collection.
- A
for
loop is made up of a collection, a loop variable, and a body. - The first line of the
for
loop must end with a colon, and the body must be indented. - Indentation is always meaningful in Python.
- Loop variables can be called anything (but it is strongly advised to have a meaningful name to the looping variable).
- The body of a loop can contain many statements.
- Use
range
to iterate over a sequence of numbers. - The Accumulator pattern turns many values into one.