# File I/O and top-down design

In class exercises
```[~]\$ cd
[~]\$ cd cs21/inclass/
```
If the w07-design directory does not yet exist, create it using mkdir
```[inclass]\$ mkdir w07-design
```
Copy the sample files for today from my directory using cp
```[inclass]\$ cp ~adanner/public/cs21/w07-design/* w07-design/
[inclass]\$ ls
w01-intro/  w02-numAndString/  w03-decisions/ w04-graphics/
w05-functions/ w06-loops/ w07-design/
[inclass]\$ cd w07-design/
[w07-design]\$ ls
colors.txt fileDemo.py
[w07-design]\$
```
For Thursday, copy a skeleton solution of the craps game to your directory using cp
```[inclass]\$ cp ~adanner/public/cs21/w07-design/craps_skel.py w07-design/
[inclass]\$ ls
```
File Demo
Open fileDemo.py in vim. In a separate window, change to the w07-design directory so you can run the program using python fileDemo.py.
Design
The basic idea is to start with the general problem and try to express a solution in terms of smaller problems. Then each smaller problem is handled in the same way until eventually the problems get so small that they are trivial to solve. Then you write each piece, test it, and join it in the with the solution so far.

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.

Specification

Input: Number of games to simulate

Output: Probability of winning