Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends...

52
Loops and Iteration Chapter 5 Python for Informatics: Exploring Information www.pythonlearn.com

Transcript of Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends...

Page 1: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Loops and IterationChapter 5

Python for Informatics: Exploring Informationwww.pythonlearn.com

Page 2: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Repeated Steps

Program:

n = 5while n > 0 : print n n = n – 1print 'Blastoff!'print n

n > 0 ?

Loops (repeated steps) have iteration variables that change each time through a loop. Often these iteration variables go

through a sequence of numbers.

No

print 'Blastoff'

Yes

n = 5

print n

Output:

54321Blastoff! 0

n = n -1

Page 3: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

An Infinite Loop

n = 5while n > 0 : print 'Lather’ print 'Rinse'print 'Dry off!'

n > 0 ?No

print 'Dry off!'

Yes

n = 5

print 'Lather'

print 'Rinse'

What is wrong with this loop?

Page 4: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Another Loop

n = 0while n > 0 : print 'Lather' print 'Rinse'print 'Dry off!'

n > 0 ?No

print 'Dry off!'

Yes

n = 0

print 'Lather'

print 'Rinse'

What does this loop do?

Page 5: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Breaking Out of a Loop• The break statement ends the current loop and jumps to the

statement immediately following the loop

• It is like a loop test that can happen anywhere in the body of the loop

> hello therehello there> finishedfinished> doneDone!

while True: line = raw_input('> ') if line == 'done' : break print lineprint 'Done!'

Page 6: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Breaking Out of a Loop• The break statement ends the current loop and jumps to the

statement immediately following the loop

• It is like a loop test that can happen anywhere in the body of the loop

while True: line = raw_input('> ') if line == 'done' : break print lineprint 'Done!'

> hello therehello there> finishedfinished> doneDone!

Page 7: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

True ?No

print 'Done'

Yes

....

...

while True: line = raw_input('> ') if line == 'done' : break print lineprint 'Done!'

http://en.wikipedia.org/wiki/Transporter_(Star_Trek)

break

Page 8: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

The continue statement ends the current iteration and jumps to the top of the loop and starts the next iteration

while True: line = raw_input('> ') if line[0] == '#' : continue if line == 'done' : break print lineprint 'Done!'

> hello therehello there> # don't print this> print this!print this!> doneDone!

Finishing an Iteration with continue

Page 9: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Finishing an Iteration with continueThe continue statement ends the current iteration and jumps to the top of the loop and starts the next iteration

while True: line = raw_input('> ') if line[0] == '#' : continue if line == 'done' : break print lineprint 'Done!'

> hello therehello there> # don't print this> print this!print this!> doneDone!

Page 10: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

True ?No

print 'Done'

Yes

while True: line = raw_input('> ') if line[0] == '#' : continue if line == 'done' : break print lineprint 'Done!'

...

....

continue

Page 11: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Indefinite Loops

• While loops are called “indefinite loops” because they keep going until a logical condition becomes False

• The loops we have seen so far are pretty easy to examine to see if they will terminate or if they will be “infinite loops”

• Sometimes it is a little harder to be sure if a loop will terminate

Page 12: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Definite Loops• Quite often we have a list of items of the lines in a file - effectively a

finite set of things

• We can write a loop to run the loop once for each of the items in a set using the Python for construct

• These loops are called “definite loops” because they execute an exact number of times

• We say that “definite loops iterate through the members of a set”

Page 13: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

A Simple Definite Loop

for i in [5, 4, 3, 2, 1] : print iprint 'Blastoff!'

54321Blastoff!

Page 14: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

A Definite Loop with Strings

friends = ['Joseph', 'Glenn', 'Sally']for friend in friends : print 'Happy New Year:', friendprint 'Done!'

Happy New Year: JosephHappy New Year: GlennHappy New Year: Sally

Done!

Page 15: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

A Simple Definite Loop

for i in [5, 4, 3, 2, 1] : print iprint 'Blastoff!'

54321Blastoff!

Done?Yes

print 'Blast off!'

print i

NoMove i ahead

Definite loops (for loops) have explicit iteration variables that change each time through a loop. These iteration

variables move through the sequence or set.

Page 16: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Looking at In...• The iteration variable

“iterates” through the sequence (ordered set)

• The block (body) of code is executed once for each value in the sequence

• The iteration variable moves through all of the values in the sequence

for i in [5, 4, 3, 2, 1] : print i

Iteration variableFive-element sequence

Page 17: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Done?Yes

print i

NoMove i ahead

• The iteration variable “iterates” through the sequence (ordered set)

• The block (body) of code is executed once for each value in the sequence

• The iteration variable moves through all of the values in the sequencefor i in [5, 4, 3, 2, 1] :

print i

Page 18: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Done?Yes

print i

NoMove i ahead

print i

i = 5

print i

i = 4

print i

i = 3

print i

i = 2

print i

i = 1

for i in [5, 4, 3, 2, 1] : print i

Page 19: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Definite Loops• Quite often we have a list of items of the lines in a file - effectively a

finite set of things

• We can write a loop to run the loop once for each of the items in a set using the Python for construct

• These loops are called “definite loops” because they execute an exact number of times

• We say that “definite loops iterate through the members of a set”

Page 20: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Loop Idioms:What We Do in Loops

Note: Even though these examples are simple, the patterns apply to all kinds of loops

Page 21: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Making “smart” loops

The trick is “knowing” something about the whole loop when you are stuck writing code that only sees one entry at a time

Set some variables to initial values

Look for something or do something to each

entry separately, updating a variable

for thing in data:

Look at the variables

Page 22: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Looping through a Set

print 'Before'for thing in [9, 41, 12, 3, 74, 15] : print thingprint 'After'

$ python basicloop.pyBefore9411237415After

Page 23: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

What is the Largest Number?

Page 24: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

3

What is the Largest Number?

Page 25: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

What is the Largest Number?

41

Page 26: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

What is the Largest Number?

12

Page 27: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

What is the Largest Number?

9

Page 28: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

What is the Largest Number?

74

Page 29: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

What is the Largest Number?

15

Page 30: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

What is the Largest Number?

Page 31: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

3

What is the Largest Number?

41 12 9 74 15

Page 32: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

What is the Largest Number?

largest_so_far -1

Page 33: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

3

What is the Largest Number?

largest_so_far 3

Page 34: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

What is the Largest Number?

largest_so_far 41

41

Page 35: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

What is the Largest Number?

largest_so_far 41

12

Page 36: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

What is the Largest Number?

largest_so_far 41

9

Page 37: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

What is the Largest Number?

largest_so_far 74

74

Page 38: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

What is the Largest Number?

largest_so_far 74

15

Page 39: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

3

What is the Largest Number?

largest_so_far 74

41 12 9 74 15

Page 40: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Finding the largest value

largest_so_far = -1print 'Before', largest_so_farfor the_num in [9, 41, 12, 3, 74, 15] : if the_num > largest_so_far : largest_so_far = the_num print largest_so_far, the_num

print 'After', largest_so_far

$ python largest.pyBefore -19 941 4141 1241 374 7474 15After 74

We make a variable that contains the largest value we have seen so far. If the current number we are looking at is larger, it is the new largest value we have seen so far.

Page 41: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Counting in a Loop

zork = 0print 'Before', zorkfor thing in [9, 41, 12, 3, 74, 15] : zork = zork + 1 print zork, thingprint 'After', zork

$ python countloop.pyBefore 01 92 413 124 35 746 15After 6

To count how many times we execute a loop, we introduce a counter variable that starts at 0 and we add one to it each time through the loop.

Page 42: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Summing in a Loop

zork = 0print 'Before', zorkfor thing in [9, 41, 12, 3, 74, 15] : zork = zork + thing print zork, thingprint 'After', zork

$ python countloop.py Before 09 950 4162 1265 3139 74154 15After 154

To add up a value we encounter in a loop, we introduce a sum variable that starts at 0 and we add the value to the sum each time through the loop.

Page 43: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Finding the Average in a Loop

count = 0sum = 0print 'Before', count, sumfor value in [9, 41, 12, 3, 74, 15] : count = count + 1 sum = sum + value print count, sum, valueprint 'After', count, sum, sum / count

$ python averageloop.py Before 0 01 9 92 50 413 62 124 65 35 139 746 154 15After 6 154 25

An average just combines the counting and sum patterns and divides when the loop is done.

Page 44: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Filtering in a Loop

print 'Before'for value in [9, 41, 12, 3, 74, 15] : if value > 20: print 'Large number',valueprint 'After'

$ python search1.py BeforeLarge number 41Large number 74After

We use an if statement in the loop to catch / filter the values we are looking for.

Page 45: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Search Using a Boolean Variable

found = Falseprint 'Before', foundfor value in [9, 41, 12, 3, 74, 15] : if value == 3 : found = True print found, valueprint 'After', found

$ python search1.py Before FalseFalse 9False 41False 12True 3True 74True 15After True

If we just want to search and know if a value was found, we use a variable that starts at False and is set to True as soon as we find what we are looking for.

Page 46: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

How to find the smallest value

largest_so_far = -1print 'Before', largest_so_farfor the_num in [9, 41, 12, 3, 74, 15] : if the_num > largest_so_far : largest_so_far = the_num print largest_so_far, the_num

print 'After', largest_so_far

$ python largest.pyBefore -19 941 4141 1241 374 7474 15After 74

How would we change this to make it find the smallest value in the list?

Page 47: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Finding the smallest value

smallest_so_far = -1print 'Before', smallest_so_farfor the_num in [9, 41, 12, 3, 74, 15] : if the_num < smallest_so_far : smallest_so_far = the_num print smallest_so_far, the_num

print 'After', smallest_so_far

We switch the variable name to smallest_so_far and switch the > to <

Page 48: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Finding the smallest value

smallest_so_far = -1print 'Before', smallest_so_farfor the_num in [9, 41, 12, 3, 74, 15] : if the_num < smallest_so_far : smallest_so_far = the_num print smallest_so_far, the_num

print 'After', smallest_so_far

$ python smallbad.pyBefore -1-1 9-1 41-1 12-1 3-1 74-1 15After -1

We switch the variable name to smallest_so_far and switch the > to <

Page 49: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

smallest = Noneprint 'Before'for value in [9, 41, 12, 3, 74, 15] : if smallest is None : smallest = value elif value < smallest : smallest = value print smallest, valueprint 'After', smallest

$ python smallest.py Before9 99 419 123 33 743 15After 3

We still have a variable that is the smallest so far. The first time through the loop smallest is None, so we take the first value to be the smallest.

Finding the smallest value

Page 50: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

The “is” and “is not” Operators

• Python has an is operator that can be used in logical expressions

• Implies “is the same as”

• Similar to, but stronger than ==

• is not also is a logical operator

smallest = Noneprint 'Before'for value in [3, 41, 12, 9, 74, 15] : if smallest is None : smallest = value elif value < smallest : smallest = value print smallest, valueprint 'After', smallest

Page 51: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

• While loops (indefinite)

• Infinite loops

• Using break

• Using continue

• For loops (definite)

• Iteration variables

• Loop idioms

• Largest or smallest

Summary

Page 52: Loops and Iteration - Dr. Chuck · Loops and Iteration Chapter 5 ... •The break statement ends the current loop and jumps to the ... patterns apply to all kinds of loops.

Acknowledgements / Contributions

These slides are Copyright 2010- Charles R. Severance (www.dr-chuck.com) of the University of Michigan School of Information and open.umich.edu and made available under a Creative Commons Attribution 4.0 License. Please maintain this last slide in all copies of the document to comply with the attribution requirements of the license. If you make a change, feel free to add your name and organization to the list of contributors on this page as you republish the materials.

Initial Development: Charles Severance, University of Michigan School of Information

… Insert new Contributors and Translators here

...