Python Programming: An Introduction to Computer Science, 3rd Ed.
Python Programming: An Introduction to Computer Science, 3rd Ed.
3rd Edition
ISBN: 9781590282755
Author: John Zelle
Publisher: Franklin, Beedle & Associates
Question
Book Icon
Chapter 9, Problem 1PE
Program Plan Intro

Program plan:

  • Import random.
  • Define “main()” function.
    • Call the function “printIntro()”.
    • Get input using “getInputs()” function.
    • Call function “simNMatches()” to find the matches.
    • Call function “printSummary()”.
    • Define a function “printIntro()”.
      • Print the statements.
    • Define a function “getInputs()”.
    • Get the value for simulation parameter “a” from the user.
    • Get the value for simulation parameter “b” from the user.
    • Get the value for simulation parameter “n” from the user.
    • Returns the three simulation parameters.
    • Define a function “simNMatches()”.
      • Initialize values.
      • Iterate a for loop up to “n”.
        • Call the function “simOneMatch()”.
        • If condition.
        • Increment the value of “matchA” by 1.
        • Else.
        • Increment the value of “matchB” by 1.
        • Return the value of “matchA” and “matchB”.
    • Define a function “simOneMatch()”.
      • Initialize the values “wisnA” and “WinsB” as 0.
      • Accumulate number of games.
      • Iterate a while loop.
        • Call a function “simOneGame()”.
        • If condition.
          • Increment the value of “winA” by 1.
          • Increment the value of “x” by 1.
        • Else condition.
          • Increment the value of “winsB” by 1.
          • Increment the value of “x” by 1.
          • Return the value of “winsA” and “winsB”.
    • Define a function “simOneGame()”.
      • Call a function “findService()” to a value “serving”.
      • Initialize values.
      • Iterate a while loop.
        • If condition “serving == "A"”.
          • If condition “random() < probA”.
            • Increment the value of “scoreA” by 1.
          • If not the condition.
            • Assign a value “B” to a variable “serving”.
          • Else if condition.
            • If condition “random() < probB” increment the value of “scoreB” by 1.
            • Increment the value of “scoreB” by 1.
          • If not the condition.
            • assign a value “A” to a variable “serving”
              • Return “scoreA”, “scoreB”..
    • Define a function “findService()”.
      • If condition “x % 2 == 0”.
        • Return “A”.
              • If not the condition.
                • Return “B”.
    • Define a function “gameOver()”.
      • If the condition satisfies.
        • Return the value of “b”.
                • Else if condition “b == 0 and a == 7”.
                  • Return the value of “a”.
                • Else if condition “abs(a-b) >= 2”.
                  • Return “True”.
                • If not the condition
                  • Return a value “False”.
    • Define a function “printSummary()”.
      • Add the value of “matchA” and “matchB” and store in a variable “n”.
      • Print the value of “n”.
      • Print the value of “matchA”.
      • Print the value of “matchB”.
  • main for function call

Expert Solution & Answer
Check Mark
Program Description Answer

This is a revision of the racquetball simulation. The problem has two major changes:

The program has to calculate results for best of n games.

First service is alternated between A and B. The odd numbered games of the match are served first by A and even numbered games are first served by B.

Explanation of Solution

Program:

#import random

from random import random

#define main() function

def main():

    #call the function printIntro()

    printIntro()

  #get input using getInputs() function

    probA, probB, n = getInputs()

  #calling function simNMatches() to find the matches

    matchA, matchB = simNMatches(n, probA, probB)

  #call function printSummary()

    printSummary(matchA, matchB)

  #define a function printIntro()

def printIntro():

    print("This program simulates a game of racquetball between two")

    print('players called "A" and "B". The abilities of each player is')

    print("indicated by a probability (a number between 0 and 1) that")

    print("reflects the likelihood of a player winning the serve.")

    print("Player A has the first serve.")

#define a function getInputs()

def getInputs():

    #get the value for simulation parameter ‘a’ from the user

    a = eval(input("What is the prob. player A wins a serve? "))

    #get the value for simulation parameter ‘b’ from the user

    b = eval(input("What is the prob. player B wins a serve? "))

    #get the value for simulation parameter ‘n’ from the user

    n = eval(input("How many games to simulate? "))

    #Returns the three simulation parameters

    return a, b, n

#define a function simNMatches()

def simNMatches(n, probA, probB):

    #initialize values

    matchA = matchB = 0

    #iterate a for loop up to n

    for i in range(n):

        #call the function simOneMatch()

        winsA, winsB = simOneMatch(probA, probB)

        #if condition

        if winsA > winsB:

            #increment the value of matchA by 1

            matchA = matchA + 1

        #else

        else:

            #increment the value of matchB by 1

            matchB = matchB + 1

    #return the value of matchA and matchB

    return matchA, matchB

#define a function simOneMatch()

def simOneMatch(probA, probB):

    #initialize the values wisnA and WinsB as 0

    winsA = winsB = 0

    #accumulate number of games

    x = 1

    #iterate a while loop

    while winsA !=2 and winsB !=2:

        #calling a function simOneGame()

        scoreA, scoreB = simOneGame(probA, probB, x)

        #if condition

        if scoreA > scoreB:

            #increment the value of winA by 1

            winsA = winsA + 1

            #increment the value of x by 1

            x = x+1

        #else condition

        else:

            #increment the value of winsB by 1

            winsB = winsB + 1

            #increment the value of x by 1.

            x = x+1

    #return the value of winsA and winsB

    return winsA, winsB

#define a function simOneGame()

def simOneGame(probA, probB, x):

    #call a function findService() to a value “serving”

    serving = findService(x)

    #initialize values

    scoreA = 0

    scoreB = 0

    #iterate a while loop.

    while not gameOver(scoreA, scoreB):

        #if condition

        if serving == "A":

            #if condition

            if random() < probA:

                #increment the value of scoreA by 1

                scoreA = scoreA + 1

            #if not the condition

            else:

                #assign a value “B” to a variable “serving”

                serving = "B"

        #else if condition

        elif serving == "B":

            #if condition

            if random() < probB:

                #increment the value of scoreB by 1

                scoreB = scoreB + 1

            #if not the condition

            else:

                #assign a value “A” to a variable “serving”

                serving = "A"

    #return

    return scoreA, scoreB

#define a function findService()

def findService(x):

    #if condition

    if x % 2 == 0:

        #return “A”

        return "A"

    #if not the condition

    else:

        #return “B”

        return "B"

#define a function gameOver()

def gameOver(a, b):

    #if the condition satisfies

    if a == 0 and b == 7:

        #return the value of “b”

        return b == 7

    #else if condition

    elif b == 0 and a == 7:

        #return the value of a

        return a == 7

    #else if condition

    elif abs(a-b) >= 2:

        #return “True”

        return True

    #if not the condition

    else:

        #return a value “False”

        return False

#define a function printSummary()

# Prints a summary of wins for each players

def printSummary(matchA, matchB):

    #add the value of matchA and matchB and store in a variable n.

    n = matchA + matchB

    #print the value of n

    print("\nGames simulated: ", n)

    #print the value of matchA

    print("Wins for A: {0} ({1:0.1%})".format(matchA, matchA/n))

    #print the value of matchB

    print("Wins for B: {0} ({1:0.1%})".format(matchB, matchB/n))

# main for function call

if __name__ == '__main__': main()

Sample Output

Output:

This program simulates a game of racquetball between two

players called "A" and "B". The abilities of each player is

indicated by a probability (a number between 0 and 1) that

reflects the likelihood of a player winning the serve.

Player A has the first serve.

What is the prob. player A wins a serve? 0.5

What is the prob. player B wins a serve? 0.7

How many games to simulate? 2

Games simulated:  2

Wins for A: 1 (50.0%)

Wins for B: 1 (50.0%)

Want to see more full solutions like this?

Subscribe now to access step-by-step solutions to millions of textbook problems written by subject matter experts!
Students have asked these similar questions
Suppose you follow a certain stock in the stock exchange and record the daily values ​​of the stock you follow for a certain period (Let's assume that the values ​​recorded for each day represent the actual price of the stock on that day). After the period is over, you want to make a simulation using the recorded values ​​and determine the correct buying and selling days in order to take the most profitable position for that stock during this period. Naturally, in order to take the most profitable position, the purchase and sale days of the stock should be determined in such a way that the prices at the time of sale and purchase should be at the highest value compared to other alternatives, that is, we want to maximize the price difference between the two points. As an example, suppose a 4-day series is taken and the recorded price series is as follows: Day 1: $ 9Day 2: $ 1Day 3: $ 54th day: $ 4 In this case, if the purchase day is the 2nd day and the selling day is the 3rd, this…
Does increasing the maximum age for foxes lead to a significantly higher numbers of foxes throughout a simulation, or is the rabbit population more likely to be reduced to zero as a result?
Draw the tracing table that shows an example of execution of Finding the highest mark of the student in 8 assessments.    Java
Knowledge Booster
Background pattern image
Similar questions
SEE MORE QUESTIONS
Recommended textbooks for you
Text book image
Database System Concepts
Computer Science
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:McGraw-Hill Education
Text book image
Starting Out with Python (4th Edition)
Computer Science
ISBN:9780134444321
Author:Tony Gaddis
Publisher:PEARSON
Text book image
Digital Fundamentals (11th Edition)
Computer Science
ISBN:9780132737968
Author:Thomas L. Floyd
Publisher:PEARSON
Text book image
C How to Program (8th Edition)
Computer Science
ISBN:9780133976892
Author:Paul J. Deitel, Harvey Deitel
Publisher:PEARSON
Text book image
Database Systems: Design, Implementation, & Manag...
Computer Science
ISBN:9781337627900
Author:Carlos Coronel, Steven Morris
Publisher:Cengage Learning
Text book image
Programmable Logic Controllers
Computer Science
ISBN:9780073373843
Author:Frank D. Petruzella
Publisher:McGraw-Hill Education