Definite loops and user input

EECS 110: Lec 10:
Definite Loops and User Input
Aleksandar Kuzmanovic
Northwestern University
http://networks.cs.northwestern.edu/EECS110-s17/
Loops!
We've seen variables change in-place before:
[ x*6 for x in range(8) ]
[ 0, 6, 12, 18, 24, 30, 36, 42 ]
remember range?
for!
1
x is assigned each value
from this sequence
for x in range(8):
print('x is', x)
2
the BODY or BLOCK of the
for loop runs with that x
print('Phew!')
4
Code AFTER the loop will not
run until the loop is finished.
3
LOOP back to
step 1 for
EACH value
in the list
four on for
for x in range(8):
print('x is', x)
factorial function?
sum the list?
construct the list?
Fact with for
def fact( n ):
answer = 1
for x in range(n):
answer = answer * x
return answer
Fact with for
def fact( n ):
answer = 1
for x in range(1,n+1):
answer = answer * x
return answer
Accumulating an answer…
Finding the sum of a list:
def sum( L ):
""" returns the sum of L's elements """
sum = 0
Accumulator!
for x in L:
sum = sum + x
return sum
shortcuts?
vs. recursion?
sum every OTHER element?
Shortcut
Shortcuts for changing variables:
k = 38
k = k + 1
k += 1 #shortcut for k = k + 1
Two kinds of for loops
Element-based Loops
sum = 0
for x in L:
sum += x
L = [ 42, -10, 4 ]
x
"selfless"
Two kinds of for loops
Element-based Loops
Index-based Loops
sum = 0
sum = 0
for x in L:
sum += x
for i in
sum +=
:
i
L = [ 42, -10, 4 ]
x
0
1
2
L = [ 42, -10, 4 ]
Two kinds of for loops
Element-based Loops
Index-based Loops
sum = 0
sum = 0
for x in L:
sum += x
for i in range(len(L)):
sum += L[i]
i
L = [ 42, -10, 4 ]
x
0
1
2
L = [ 42, -10, 4 ]
L[i]
Sum every other element
Finding the sum of a list:
def sum( L ):
""" returns the sum of L's elements """
Accumulator!
sum = 0
for i in range(len(L)):
if ________:
sum += L[i]
return sum
shortcuts?
vs. recursion?
sum every OTHER element?
Sum every other element
Finding the sum of a list:
def sum( L ):
""" returns the sum of L's elements """
Accumulator!
sum = 0
for i in range(len(L)):
if i%2 == 0:
sum += L[i]
return sum
shortcuts?
vs. recursion?
sum every OTHER element?
Extreme Looping
What does this code do?
print('It keeps on’)
while True:
print('going and')
print('Phew! I\'m done!')
Extreme Looping
Anatomy of a while loop:
print('It keeps on')
“while”
loop
the loop keeps on running as
long as this test is True
while True:
print('going and')
print('Phew! I\'m done!’)
This won't print until the while loop finishes in this case, never!
alternative tests?
Extreme Looping
Slowing things down…
import time
print('It keeps on')
“while”
loop
the loop keeps on running as
long as this test is True
while True:
print('going and')
time.sleep(1)
print('Phew! I\'m done!')
Making our escape!
import random
escape = 0
while escape != 42:
print('Help! Let me out!’)
escape = random.choice([41,42,43])
print('At last!’)
how could we count the number of loops we run?
Loops aren't just for lists…
for c in 'down with CS!':
print(c)
"Quiz"
Names:
Write a loop to find and return the min of a list, L
def min( L ):
L is a list of numbers.
What do these two loops print?
n = 0
for c in 'forty-two':
if c not in 'aeiou':
n += 1
print(n)
Write a loop so that this function returns True
if its input is prime and False otherwise:
def isPrime( n ):
n = 3
while n > 1:
print(n)
if n%2 == 0:
n = n/2
else:
n = 3*n + 1
n is a positive integer
What do these two loops print?
n = 0
for c in 'forty-two':
if c not in 'aeiou':
n += 1
print(n)
??
n = 3
while n > 1:
print(n)
if n%2 == 0:
n = n/2
else:
n = 3*n + 1
What do these two loops print?
n = 0
for c in 'forty-two':
if c not in 'aeiou':
n += 1
print n
n = 3
while n > 1:
print n
if n%2 == 0:
n = n/2
else:
n = 3*n + 1
7
??
What do these two loops print?
n = 0
for c in 'forty-two':
if c not in 'aeiou':
n += 1
print n
n = 3
while n > 1:
print n
if n%2 == 0:
n = n/2
else:
n = 3*n + 1
7
3
What do these two loops print?
n = 0
for c in 'forty-two':
if c not in 'aeiou':
n += 1
print n
7
n = 3
while n > 1:
print n
if n%2 == 0:
n = n/2
else:
n = 3*n + 1
3
10
What do these two loops print?
n = 0
for c in 'forty-two':
if c not in 'aeiou':
n += 1
print n
7
n = 3
while n > 1:
print n
if n%2 == 0:
n = n/2
else:
n = 3*n + 1
3
10
5
What do these two loops print?
n = 0
for c in 'forty-two':
if c not in 'aeiou':
n += 1
print n
7
n = 3
while n > 1:
print n
if n%2 == 0:
n = n/2
else:
n = 3*n + 1
3
10
5
16
What do these two loops print?
n = 0
for c in 'forty-two':
if c not in 'aeiou':
n += 1
print n
7
n = 3
while n > 1:
print n
if n%2 == 0:
n = n/2
else:
n = 3*n + 1
3
10
5
16
8
What do these two loops print?
n = 0
for c in 'forty-two':
if c not in 'aeiou':
n += 1
print n
7
n = 3
while n > 1:
print n
if n%2 == 0:
n = n/2
else:
n = 3*n + 1
3
10
5
16
8
4
What do these two loops print?
n = 0
for c in 'forty-two':
if c not in 'aeiou':
n += 1
print n
7
n = 3
while n > 1:
print n
if n%2 == 0:
n = n/2
else:
n = 3*n + 1
3
10
5
16
8
4
2
def min( L ):
L is a list of numbers.
def isPrime( n ):
n is a positive integer
def min( L ): L is a list of numbers.
mn = L[0]
for i in range(1,len(L)):
if L[i] < mn:
mn = L[i]
return mn
def isPrime( n ):
n is a positive integer
def min( L ): L is a list of numbers.
mn = L[0]
for i in range(1,len(L)):
if L[i] < mn:
mn = L[i]
return mn
def min( L ):
mn=L[0]
for s in L:
if s < mn:
mn = s
return mn
def isPrime( n ):
n is a positive integer
def min( L ): L is a list of numbers.
mn = L[0]
for i in range(1,len(L)):
if L[i] < mn:
mn = L[i]
return mn
def min( L ):
mn=L[0]
for s in L:
if s < mn:
mn = s
return mn
def isPrime( n ): n is a positive integer
for i in range (n):
if i not in [0,1]:
if n%i == 0:
return False
return True
Lab 8: the Mandelbrot Set
Consider the following update rule for
all complex numbers c:
z0 = 0
zn+1 = zn2 + c
Benoit M.
If z does not diverge, c is in the M. Set.
Imaginary axis
z3
c
z1
z0
z2
z4
Real axis
Lab 8: the Mandelbrot Set
Consider the following update rule for
all complex numbers c:
z0 = 0
zn+1 = zn2 + c
Benoit M.
If c does not diverge, it's in the M. Set.
Imaginary axis
z3
c
z1
z0
z2
z4
Real axis
example of a non-diverging cycle
Lab 8: the Mandelbrot Set
Consider the following update rule for
all complex numbers c:
z0 = 0
zn+1 = zn2 + c
The shaded area are points that do not diverge.