Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS 121 Today Fractals and Turtles! The Koch Curve how random…

Similar presentations


Presentation on theme: "CS 121 Today Fractals and Turtles! The Koch Curve how random…"— Presentation transcript:

1 CS 121 Today Fractals and Turtles! The Koch Curve how random…

2 When good programs go bad… def power(b, p): """ Returns b**p for p >= 0 """ if p == 0: return 1 else: return b*power(b, p)

3 print: Making programs talk to you! Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs. - Maurice Wilkes Programming: the art of debugging an empty file. - The Jargon File

4 When good programs go bad… def power(b, p): """ Returns b**p for p >= 0 """ print ("p is", p, "; b is", b) if p == 0: return 1 else: return b*power(b, p)

5 Careful! print != return def power(b, p): """ Returns b**p for p >= 0 """ if p == 0: return 1 else: return b*power(b, p-1) def powerPrint(b, p): """ Returns(?) b**p for p >= 0 """ if p == 0: print (1) else: print (b*powerPrint(b, p-1))

6 sum, range def sum(L): """ input: a list of numbers, L output: L's sum """

7 sum, range def sum(L): """ input: a list of numbers, L output: L's sum """ if len(L) == 0: return 0.0 else: return L[0] + sum(L[1:]) Base Case if the input has no elements, its sum is zero Recursive Case if L does have an element, add that element's value to the sum of the REST of the list… This input to the recursive call must be "smaller" somehow…

8 sum, range def range(low,hi): """ input: two ints, low and hi output: int list from low up to hi """ excluding hi

9 sum, range def range(low,hi): """ input: two ints, low and hi output: int list from low up to hi """ if hi <= low: return [] else: return excluding hi

10 sum, range def range(low,hi): """ input: two ints, low and hi output: int list from low up to hi """ if hi <= low: return [] else: return [low] + range(low+1,hi) excluding hi

11 A random aside… import random random.choice( L ) random.uniform(low,hi) random.choice( ['north', 'case', 'west'] ) random.uniform(41.9,42.1) chooses 1 element from the list L (with uniform probability) chooses a random float from low to hi for more explanation, try dir(random) or help(random) How likely is this to return 42 ? How would you get a random int from 0 to 9?

12 Randomness vs. Determinism Are there random numbers? Output RNG Can a computer generate them? A “ black box ” model of a random number generator.

13 Randomness vs. Determinism Are there random numbers?Can a computer generate them? The RNG revealed. Output YesNot without help! http://en.wikipedia.org/wiki/Mersenne_twister Periodic! p = 2 19937 -1

14 Some random history… True randomness is valuable! http://www.rand.org/pubs/monograph_reports/MR1418/index.html but not that valuable!

15 A random function… print the guesses ? return the number of guesses ? from random import * def guess( hidden ): """ guesses the user's hidden # """ compguess = choice( range(100) ) if compguess == hidden: # at last! print ('I got it!’) else: guess( hidden ) This is a bit suspicious… slow down…

16 The final version from random import * import time def guessFinal( hidden ): """ guesses the user's hidden # """ compguess = choice( range(100) ) print ('I choose', compguess) time.sleep(0.05) if compguess == hidden: # at last! print ('I got it!’) return 0 else: return 1 + guessFinal( hidden )

17 The two Monte Carlos Monte Carlo casino, Monaco Making random numbers work for you! Monte Carlo methods, Math/CS

18 Monte Carlo in action Suppose you roll two dice. What are the chances that you roll doubles? def countDoubles( N ): """ inputs a # of dice rolls outputs the # of doubles """ if N == 0: return 0 # zero rolls, zero doubles… else: d1 = choice( [1,2,3,4,5,6] ) d2 = choice( range(1,7) ) if d1 != d2: return countDoubles( N-1 ) # not doubles else: return # doubles! one roll of the dice where is the doubles check? input is the total number of rolls what should the last line be?

19 Monty Hall Let ’ s make a deal ’ 63- ’ 86 inspiring the “ Monty Hall paradox ”

20 Monte Carlo Monty Hall Suppose you always switch to the other door... What are the chances that you will win the car ? Run it (randomly) 1000 times and see!

21 Monte Carlo Monty Hall def MCMH( init, sors, N ): """ plays the same "Let's make a deal" game, N times returns the number of times you win the car """ if N == 0: return 0 # don't play, can't win carDoor = choice([1,2,3]) # where is the car? if init == carDoor and sors == 'stay': result = 'Car!' elif init == carDoor and sors == 'switch': result = 'Spam.' elif init != carDoor and sors == 'switch': result = 'Car!' else: result = 'Spam.' print ('You get the', result) if result == 'Car!': return 1 + MCMH( init, sors, N-1 ) else: return 0 + MCMH( init, sors, N-1 ) Your initial choice! 'switch' or 'stay' number of times to play


Download ppt "CS 121 Today Fractals and Turtles! The Koch Curve how random…"

Similar presentations


Ads by Google