Exercises for Lesson 16

Back to Lesson 16

Exercise 1: 2nd-level design

Consider the following top-level function.

def main():
    printIntro()
    probA, probB, n = getInputs()
    winsA, winsB, draws = simNGames(probA, probB, n)
    printResults(winsA, winsB, draws)
    graphResults(winsA, winsB, draws)

Provide implementations for the following functions:

  • printIntro
  • getInputs
  • printResults
  • graphResults

Back to Lesson 16

Exercise 2: Simulating a single game

We now have an idea of how to simulate n games. We have defined a function simOneGame that simulates a single coin-flip game. We also defined last time a function that flips a weighted coin.

def flipCoin(probHeads):
    if random.random() < probHeads:
        return "heads"
    else:
        return "tails"

Using this definition, complete the third-level design of simOneGame:

def simOneGame(probA, probB):
    # TODO
    return None

Back to Lesson 16

Exercise 2: Weighted dice

We talked about the following function, which effectively flips an unfair coin, one that comes up heads with probability prob. Here is that flipCoin function:

def flipCoin(prob):
    if random.random() < prob: # less than so that it is exactly prob% of the range [0,1)
        return "heads"
    else:
        return "tails"

Back to Lesson 16

Exercise 3: Unit testing flipCoin

Given the flipCoin function, write two more unit tests.

def flipCoin(prob):
    if random.random() < prob: # less than so that it is exactly prob% of the range [0,1)
        return "heads"
    else:
        return "tails"

The first unit test should test the case where it is always heads. The second should provide a given probability and check that over a very large number of calls to flipCoin, the result is "heads" with roughly that probability.

def testFlipCoinTails():
    pass # TODO

def testFlipCoinRandom():
    pass # TODO

Back to Lesson 16