import rball rball simonegame ( rball simonegame ( rball simonegame ( rball simonegame ( rball simonegame ( rball simonegame ( rball simonegame ( rball simonegame ( rball simonegame ( rball simonegame ( notice that when the probabilities are equalthe scores are close when the probabilities are farther apartthe game is rout that squares with how we think this function should behave we can continue this piecewise implementationtesting out each component as we add it into the code software engineers call this process unit testing testing each function independently makes it easier to spot errors by the time you get around to testing the entire programchances are that everything will work smoothly separating concerns through modular design makes it possible to design sophisticated programs separating concerns through unit testing makes it possible to implement and debug sophisticated programs try these techniques for yourselfand you'll see that you are getting your programs working with less overall effort and far less frustration simulation results finallywe can take look at denny dibblebit' question is it the nature of racquetball that small differences in ability lead to large differences in the outcomesuppose denny wins about of his serves and his opponent is better how often should denny win the gamehere' an example run where denny' opponent always serves first this program simulates game of racquetball between two players called "aand "bthe abilities of each player is indicated by probability ( number between and that