WEEK07: top-down design
---------------------------------------------------------------
M: start top-down design
ANNOUNCEMENTS:
- Lab 6 (frog race) due this Saturday
- Quiz 3 on FRIDAY
TOP-DOWN DESIGN:
Top Down Design is a problem solving technique where you:
1. Start with General Description of Problem
2. Break it into several high-level steps
3. Iteratively break the steps into smaller steps until you have
steps that are easy to solve
- just like writing a paper...start with an outline, then fill
in the second-level details, and so on until you can start
writing each section/function
- for example, writing a wheel-of-fortune game might start
with something like this:
main: read phrases from file
pick one phrase for the game
play the game, with the chosen phrase
output the results
Each one of those could be a single function, or may need to
be broken down into multiple functions. If you think one of
the above should be a single function, sketch it out (what
arguments would it need, what would it do and how, and what
should it return). If you think one of the above (ex: play the
game) will be more than one function, do another level of
top-down design on that.
- GOALS: get main() written, decide on data structures, how data
will go to/from each function, write function stubs so we can
write and TEST EACH FUNCTION ONE AT-A-TIME!
YOUR TURN:
Let's demonstrate this idea with the dice game Craps.
- A player rolls a pair of six-sided dice.
- If the initial roll is 2, 3, or 12, the player loses.
- If the initial roll is 7 or 11, the player wins.
- Any other initial roll causes the player to "roll for point".
This means that the player keeps rolling either until she
re-rolls the initial value (a win) or rolls a 7 (a loss).
Let's write a program to simulate multiple games of craps and
estimate the probability that the player wins.
"""
Craps simulator using top down design
Input: Number of games to simulate
Output: Probability of winning
A. Danner
Fall 2013
"""
from random import randrange
####################################################
def main():
""" brief outline/overview of program """
ngames = getNumberOfGames()
nwins = 0
for game in range(ngames):
result = playOneGame()
if(result == True):
nwins = nwins+1
print "Winning percentage: %.2f%% " % (100.0*nwins/ngames)
# ----------------------------------------------- #
def getNumberOfGames():
"""prompt user to enter a number of games to simulate
check if input is valid
return positive integer
"""
val = 10
return val
# ----------------------------------------------- #
def rollTwoDice():
""" roll two dice, return sum """
roll1 = 5
roll2 = 8
return roll1 + roll2
# ----------------------------------------------- #
def playOneGame():
""" Plays a single of craps
Returns True if player wins, False otherwise
"""
return False
####################################################
main()
NOTE: it doesn't do everything yet, but the structure and design are
all specified. The program runs, and I can start working on adding
each function. I can also TEST each function as I write them. Once
I know they are working, I can move on to the next function.
TEST AS YOU GO!!!
- Let's add more to the playOneGame() function:
def playOneGame():
""" Plays a single of craps
Returns True if player wins, False otherwise
"""
print "Playing one game"
roll = rollTwoDice()
if roll == 2 or roll == 3 or roll == 12:
return False
elif roll == 7 or roll == 11:
return True
else:
#play for point
print "not implemented"
return False
- should still be able to run it!
- maybe we need another function for "play for point"???