35
EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University http://networks.cs.northwestern.edu/EECS110- s15/

EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Embed Size (px)

Citation preview

Page 1: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

EECS 110: Lec 10: Definite Loops and User Input

Aleksandar Kuzmanovic

Northwestern University

http://networks.cs.northwestern.edu/EECS110-s15/

Page 2: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

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?

Page 3: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

for!

for x in range(8):

print('x is', x)

print('Phew!')

x is assigned each value from this

sequence

the BODY or BLOCK of the for loop runs with that x

Code AFTER the loop will not run until the loop is finished.

1

2

3

4

LOOP back to step 1 for EACH value in the list

Page 4: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

four on for

for x in range(8):

print('x is', x)

factorial function?

sum the list?

construct the list?

Page 5: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Fact with for

def fact( n ):

answer = 1

for x in range(n):

answer = answer * x

return answer

Page 6: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Fact with for

def fact( n ):

answer = 1

for x in range(1,n+1):

answer = answer * x

return answer

Page 7: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Accumulating an answer…

def sum( L ):

""" returns the sum of L's elements """

sum = 0

for x in L:

sum = sum + x

return sum

Finding the sum of a list:

Accumulator!

shortcuts?

vs. recursion?

sum every OTHER element?

Page 8: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Shortcut

Shortcuts for changing variables:

k = 38

k = k + 1

k += 1 #shortcut for k = k + 1

Page 9: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Two kinds of for loops

Element-based Loops

sum = 0

for x in L: sum += x

L = [ 42, -10, 4 ]

x

"selfless"

Page 10: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Two kinds of for loops

Element-based Loops

L = [ 42, -10, 4 ]

x

L = [ 42, -10, 4 ]

i0 1 2

Index-based Loops

sum = 0

for x in L: sum += x

sum = 0

for i in : sum +=

Page 11: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Two kinds of for loops

Element-based Loops

L = [ 42, -10, 4 ]

x

L = [ 42, -10, 4 ]

i0 1 2

Index-based Loops

sum = 0

for x in L: sum += x

sum = 0

for i in range(len(L)): sum += L[i]

L[i]

Page 12: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Sum every other element

def sum( L ):

""" returns the sum of L's elements """

sum = 0

for i in range(len(L)):

if ________:

sum += L[i]

return sum

Finding the sum of a list:

Accumulator!

shortcuts?

vs. recursion?

sum every OTHER element?

Page 13: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Sum every other element

def sum( L ):

""" returns the sum of L's elements """

sum = 0

for i in range(len(L)):

if i%2 == 0:

sum += L[i]

return sum

Finding the sum of a list:

Accumulator!

shortcuts?

vs. recursion?

sum every OTHER element?

Page 14: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Extreme Looping

What does this code do?

print('It keeps on’)

while True: print('going and')

print('Phew! I\'m done!')

Page 15: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Extreme Looping

Anatomy of a while loop:

print('It keeps on')

while True: print('going and')

print('Phew! I\'m done!’)

“while” loop

the loop keeps on running as long as this test is True

alternative tests?

This won't print until the while loop finishes - in this case, never!

Page 16: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Extreme Looping

import time

print('It keeps on')

while True: print('going and') time.sleep(1)

print('Phew! I\'m done!')

“while” loop

Slowing things down…

the loop keeps on running as long as this test is True

Page 17: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Making our escape!

import randomescape = 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?

Page 18: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Loops aren't just for lists…

for c in 'down with CS!':

print(c)

Page 19: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

"Quiz"What do these two loops

print?

n = 0

for c in 'forty-two':

if c not in 'aeiou':

n += 1

print(n)

def min( L ):

Write a loop to find and return the min of a list, LL is a list of numbers.

n = 3while n > 1: print(n) if n%2 == 0: n = n/2 else: n = 3*n + 1

def isPrime( n ):

Names:

Write a loop so that this function returns True if its input is prime and False otherwise:

n is a positive integer

Page 20: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

What do these two loops print?

n = 0

for c in 'forty-two':

if c not in 'aeiou':

n += 1

print(n)

??

n = 3while n > 1: print(n) if n%2 == 0: n = n/2 else: n = 3*n + 1

Page 21: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

What do these two loops print?

n = 0

for c in 'forty-two':

if c not in 'aeiou':

n += 1

print n

7

n = 3while n > 1: print n if n%2 == 0: n = n/2 else: n = 3*n + 1

??

Page 22: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

What do these two loops print?

n = 0

for c in 'forty-two':

if c not in 'aeiou':

n += 1

print n

7

n = 3while n > 1: print n if n%2 == 0: n = n/2 else: n = 3*n + 1

3

Page 23: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

What do these two loops print?

n = 0

for c in 'forty-two':

if c not in 'aeiou':

n += 1

print n

7

n = 3while n > 1: print n if n%2 == 0: n = n/2 else: n = 3*n + 1

310

Page 24: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

What do these two loops print?

n = 0

for c in 'forty-two':

if c not in 'aeiou':

n += 1

print n

7

n = 3while n > 1: print n if n%2 == 0: n = n/2 else: n = 3*n + 1

3105

Page 25: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

What do these two loops print?

n = 0

for c in 'forty-two':

if c not in 'aeiou':

n += 1

print n

7

n = 3while n > 1: print n if n%2 == 0: n = n/2 else: n = 3*n + 1

310516

Page 26: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

What do these two loops print?

n = 0

for c in 'forty-two':

if c not in 'aeiou':

n += 1

print n

7

n = 3while n > 1: print n if n%2 == 0: n = n/2 else: n = 3*n + 1

3105168

Page 27: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

What do these two loops print?

n = 0

for c in 'forty-two':

if c not in 'aeiou':

n += 1

print n

7

n = 3while n > 1: print n if n%2 == 0: n = n/2 else: n = 3*n + 1

31051684

Page 28: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

What do these two loops print?

n = 0

for c in 'forty-two':

if c not in 'aeiou':

n += 1

print n

7

n = 3while n > 1: print n if n%2 == 0: n = n/2 else: n = 3*n + 1

310516842

Page 29: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

def min( L ): L is a list of numbers. def isPrime( n ): n is a positive integer

Page 30: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

L is a list of numbers. def isPrime( n ): n is a positive integerdef min( L ):

mn = L[0]

for i in range(1,len(L)):

if L[i] < mn:

mn = L[i]

return mn

Page 31: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

L is a list of numbers. def isPrime( n ): n is a positive integerdef min( L ):

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

Page 32: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

def min( L ):

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

L is a list of numbers. def isPrime( n ):

for i in range (n):

if i not in [0,1]:

if n%i == 0:

return False

return True

n is a positive integer

Page 33: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Consider the following update rule for all complex numbers c:

z0 = 0

zn+1 = zn2 + c

If z does not diverge, c is in the M. Set.

Real axis

Imaginary axis

c

Lab 8: the Mandelbrot Set

Benoit M.

z0

z1z2

z3

z4

Page 34: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Consider the following update rule for all complex numbers c:

z0 = 0

zn+1 = zn2 + c

If c does not diverge, it's in the M. Set.

Real axis

Imaginary axis

c

Lab 8: the Mandelbrot Set

Benoit M.

z0

z1z2

z3

z4

example of a non-diverging cycle

Page 35: EECS 110: Lec 10: Definite Loops and User Input Aleksandar Kuzmanovic Northwestern University

Consider the following update rule for all complex numbers c:

z0 = 0

zn+1 = zn2 + c

Lab 8: the Mandelbrot Set

The shaded area are points that do not diverge.