For Loops
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"
for number in [2, 3, 5]: print(number)
- This
for
loop is equivalent to:
print(2) print(3) print(5)
- And the
for
loop's output is:
2 3 5
A for
loop is made up of a collection, a loop variable, and a body
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.
for number in [2, 3, 5]: print(number)
IndentationError: expected an indented block
- Indentation is always meaningful in Python.
firstName = "Jon" lastName = "Smith"
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.
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.
primes = [2, 3, 5] for p in primes: squared = p ** 2 cubed = p ** 3 print(p, squared, cubed)
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
print('a range is not a list: range(0, 3)') for number in range(0, 3): print(number)
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.
# Sum the first 10 integers. total = 0 for number in range(10): total = total + (number + 1) print(total)
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.
- We have to add
number + 1
becauserange
produces 0..9, not 1..10.
Classifying Errors
Is an indentation error a syntax error or a runtime error?
Tracing Execution
Create a table showing the numbers of the lines that are executed when this program runs,
and the values of the variables after each line is executed.
total = 0 for char in "tin": total = total + 1
Reversing a String
Fill in the blanks in the program below so that it prints "nit" (the reverse of the original character string "tin").
original = "tin" result = ____ for char in original: result = ____ print(result)
Practice Accumulating
Fill in the blanks in each of the programs below to produce the indicated result.
# Total length of the strings in the list: ["red", "green", "blue"] =12 total = 0 for word in ["red", "green", "blue"]: ____ = ____ + len(word) print(total)
# List of word lengths: ["red", "green", "blue"] =[3, 5, 4] lengths = ____ for word in ["red", "green", "blue"]: lengths.____(____) print(lengths)
# Concatenate all words: ["red", "green", "blue"] ="redgreenblue" words = ["red", "green", "blue"] result = ____ for ____ in ____: ____ print(result)
Create an acronym: Starting from the list
["red", "green", "blue"]
, create the acronym "RGB"
using a for loop.Hint: You may need to use a string method to properly format the acronym.
Cumulative Sum
Cumulative Sum
Reorder and properly indent the lines of code below
so that they print a list with the cumulative sum of data.
The result should be
[1, 3, 5, 10]
.cumulative.append(total) for number in data: cumulative = [] total += number total = 0 print(cumulative) data = [1,2,2,5]
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.
for number in range(10): # use a if the number is a multiple of 3, otherwise use b if (Number % 3) == 0: message = message + a else: message = message + "b" print(message)
Identifying Item 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 error is it?
- Fix the error.
seasons = ['Spring', 'Summer', 'Fall', 'Winter'] print('My favorite season is ', seasons[4])