0% found this document useful (0 votes)
60 views56 pages

9A. Iteration With Range

This document discusses using for loops to iterate through ranges, strings, and other sequences. It provides examples of summing values using a for loop, finding minimum values, and using for loops within functions. It also demonstrates using for loops to draw checkered patterns by iterating through rows and squares. Key points include: - Using range(n) to iterate from 0 to n-1 - Keeping a running sum or minimum value and updating it each iteration - Implementing numerical methods like square root approximation using for loops - Drawing patterns by iterating through rows and calling procedures like DrawRect multiple times

Uploaded by

Anjani Arnav
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
60 views56 pages

9A. Iteration With Range

This document discusses using for loops to iterate through ranges, strings, and other sequences. It provides examples of summing values using a for loop, finding minimum values, and using for loops within functions. It also demonstrates using for loops to draw checkered patterns by iterating through rows and squares. Key points include: - Using range(n) to iterate from 0 to n-1 - Keeping a running sum or minimum value and updating it each iteration - Implementing numerical methods like square root approximation using for loops - Drawing patterns by iterating through rows and calling procedures like DrawRect multiple times

Uploaded by

Anjani Arnav
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 56

9A.

Iteration with range


Topics:
Using for with range
Summation
Computing Mins
Functions and for-loops
A Graphics Applications

Iterating Through a String


Output:
s = abcd
for c in s:
print c

a
b
c
d

In this example, the for-loop variable is c.


One at a time, it takes on the value of each
character in s.
We learned about this in the previous lecture.

Iterating Through a Range


Output:
n = 4
for k in range(n):
print k

How does this work? What does range(n) mean?

0
1
2
3

Note the Similarities


n = 4
for k in range(n):
print k

Output:

0
1
2
3

s = abcd
for c in s:
print c

Output:

a
b
c
d

Summation is a Good Example


n = 4
s = 0
for k in range(n):
x = 2**k
s = s + x
print s

Output:

1 + 2 + 4 + 8 = 15
We are repeating the purple box 4 times

15

for-loop Mechanics with range


for k in range(4):

Loop Body
Let
Let
Let
Let

k
k
k
k

=
=
=
=

0
1
2
3

and then
and then
and then
and then

execute
execute
execute
execute

the
the
the
the

loop
loop
loop
loop

body.
body.
body.
body.

k is called the loop variable a.k.a. the count variable

Summation
n = 4
s = 0
for k in range(n):
x = 2**k
s = s + x
print s

Output:

1 + 2 + 4 + 8 = 15
Lets derive this code. Its about adding up powers of two

15

Summation: How Do We Do It?


Lets add up powers of 2

1=1
3=1+2
7=1+2+4
15 = 1 + 2 + 4 + 8
And so on
Do we start from scratch each time we generate a new sum?

Summation
Lets add up powers of 2

1=1
3=1+2
7=1+2+4
15 = 1 + 2 + 4 + 8

1=0+1
3=1+2
7=3+4
15 = 7 + 8

And so on

And so on

Nope! We keep a running sum into which we add powers of 2

Summation
s
x
s
x
s
x
s
x
s

=
=
=
=
=
=
=
=
=

0
2**0
s+x
2**1
s+x
2**2
s+x
2***3
s+x

1=0+1

3=1+2
7=3+4
15 = 7 + 8

Summation
s
x
s
x
s
x
s
x
s

=
=
=
=
=
=
=
=
=

0
2**0
s+x
2**1
s+x
2**2
s+x
2**3
s+x

1=0+1
3=1+2

7=3+4
15 = 7 + 8

Note the pattern

Summation
s
x
s
x
s
x
s
x
s

=
=
=
=
=
=
=
=
=

0
2**0
s+x
2**1
s+x
2**2
s+x
2**3
s+x

s = 0
for k in range(4):
x = 2**k
s = s+x
print s

Lets step through the mechanics of this for-loop

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

Initialize the running sum s.

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

k ->

We enter the loop.


The loop variable k is set to zero

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

k ->

k<4 is true so we execute the loop body


with that value of k.

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

k ->

x ->

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

k is increased by 1

s ->

k ->

x ->

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

k ->

x ->

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

k ->

x ->

k<4 is true so we execute the loop body


with that value of k.

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

k ->

x ->

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

k is increased by 1

s ->

k ->

x ->

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

k ->

x ->

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

k ->

x ->

k<4 is true so we execute the loop body


with that value of k.

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

k ->

x ->

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

k is increased by 1

s ->

k ->

x ->

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

k ->

x ->

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

k ->

x ->

k<4 is true so we execute the loop body


with that value of k.

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

15

k ->

x ->

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

k is increased by 1

s ->

15

k ->

x ->

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

15

k ->

x ->

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

s ->

15

k ->

x ->

k<4 is False so we exit the loop body


and proceed with the next
statement after the loop.

1+2+4+8
s = 0
for k in range(4):
x = 2**k
s = s + x
print s

Output

15

s ->

15

k ->

x ->

More General:
1 + 2 + 4 + + 2**(n-1)
n = any positive integer
s = 0
for k in range(n):
x = 2**k
s = s+x
print s

for-loop Mechanics with range


for k in range(n):

Loop Body
Let k = 0 and then execute the loop body.
Let k = 1 and then execute the loop body.
Let k = 2 and then execute the loop body.
:
Let k = n-1 and then execute the loop body.

for-loop Mechanics with range


for k in range(n):
x = 2**k
s = s+x
Let k = 0 and then execute the loop body.
Let k = 1 and then execute the loop body.
Let k = 2 and then execute the loop body.
:
Let k = n-1 and then execute the loop body.

Counting:
A Special Type of Summation

How Many Integers < 10**6 are


there that are divisible by
2, 3, and 5?
N = 0
for k in range(10**6):
if k%2==0 and k%3==0 and k%5==0:
N = N+1
print N
Output:

33334

Using a For-Loop to
Enumerate all Possibilities

Left-Shifting a String
Output:
s = abcd
n = len(s)
for k in range(n):
t = s[k:]+s[:k]
print t

abcd
bcda
cdab
dabc
If k==2, then s[2:]+s[:2]
looks like this: cd + ab

Iteration with strings doesnt always have the form for c in s

Looking for a Minimum

Assume this Function is Available


def dist(t):
Returns a float that is the distance
between Earth and a rogue asteroid
at time t (days).
PreC: t is a nonnegative float."""

Problem: Which of the numbers


dist(0), dist(1), dist(2),,dist(100000)

is the smallest and what is its value?

Solution
d_min = dist(0)
t_min = 0
for t in range(100001):
d_current = dist(t)
if d_current < d_min:
# A new minimum is found
d_min = d_current
# Remember the day it occurred
t_min = t
print t_min, d_min
We need range(100001) because we want to check dist(100000)

More on range
In all our examples, the loop variable
steps from 0 to some number.
There are other options.

Counting from 1
n = 4
for k in range(n):
print k

Output:

0
1
2
3

n = 4
for k in range(1,n):
print k

Output:

1
2
3

Counting from Here to


(Almost) There
Here = 20
There = 24
for k in range(Here,There):
print k

Output:

20
21
22
23

Counting Down
Here = 20
There = 24
for k in range(There,Here,-1):
print k

Output:

24
23
22
21

Now Let Us Look at


Functions and For Loops

Recall From SimpleMath


def sqrt(x):
x = float(x)
L = x
L = (L + x/L)/2
L = (L + x/L)/2
L = (L + x/L)/2
L = (L + x/L)/2
L = (L + x/L)/2
return L

Lets implement this with a for-loop

For-Loop Implementation
def sqrt(x):
x = float(x)
L = x
L = (L + x/L)/2
L = (L + x/L)/2
L = (L + x/L)/2
L = (L + x/L)/2
L = (L + x/L)/2
return L

def sqrt(x):
x = float(x)
L = x
for k in range(5):
L = (L + x/L)/2
return L

Another For-Loop Implementation


def sqrt(x):
x = float(x)
L = x
for k in range(5):
L = (L + x/L)/2
return L

Sample Call:

def sqrt(x,N=5):
x = float(x)
L = x
for k in range(N):
L = (L + x/L)/2
return L

y = sqrt(12345,20)

The optional argument allows you to determine the number of iterations.

Now Let Us Look at


Graphics Procedures
and For Loops

Recall DrawRect
This will draw a red square with side s
and center (xc,yc):
DrawRect(xc,yc,s,s,FillColor=RED)

This will draw a white square with side s


and center (xc,yc):
DrawRect(xc,yc,s,s,FillColor=WHITE)

Lets Write a Procedure that


Can Draw a Checkered Row
Assume n squares
each with side s.
Assume (x0,y0) is
the center of the
leftmost square.
Let c1 and c2 be the
Colors of the first
and second square

Solution
def DrawRow(x0,y0,s,n,c1,c2):
# Center of next square is (xc,yc)
xc = x0, yc = y0
for k in range(n):
% Draw the kth square
if k%2==0:
DrawRect(xc,yc,s,s,FillColor=c1)
else:
DrawRect(xc,yc,s,s,FillColor=c2)
xc = xc+s

Now Lets Draw This

This Draws an 8x8 Checker Board


y0 = -4; x0 = -3.5; n = 8; s = 1
#(x0,y0) is the center of the leftmost
# square in the next row to draw
for k in range(n):
# Draw the kth row
if k%2==0:
DrawRow(x0,y0,s,n,RED,WHITE)
else:
DrawRow(x0,y0,s,n,WHITE,RED)
# The next row is s units higher
y0 = y0+s

You might also like