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
Imagine there are N teams competing in a tournament, and that each team plays each of the other teams once. If a tournament were to take place, it should be demonstrated (using an example) that every team would lose to at least one other team in the tournament.
Correct answer will be upvoted else Multiple Downvoted. Computer science. player begins the game from the 1-st stage and should beat the stages in expanding request of the stage number. The player dominates the match in the wake of beating the n-th stage.    There is all things considered one designated spot on each stage, and there is consistently a designated spot on the 1-st stage. Toward the start of the game, just the designated spot on the 1-st stage is initiated, and any remaining designated spots are deactivated. At the point when the player gets to the I-th stage that has a designated spot, that designated spot is initiated.    For each attempt of a phase, the player can either beat the stage or bomb the stage. On the off chance that they beat the I-th stage, the player is moved to the i+1-st stage. On the off chance that they bomb the I-th stage, the player is moved to the latest designated spot they actuated, and they need to beat the stages after that designated spot once…
There is an upcoming football tournament, and the n participating teams are labelled from 1 to n. Each pair of teams will play against each other exactly once. Thus, a total of  matches will be held, and each team will compete in n − 1 of these matches. There are only two possible outcomes of a match: 1. The match ends in a draw, in which case both teams will get 1 point. 2. One team wins the match, in which case the winning team gets 3 points and the losing team gets 0 points. Design an algorithm which runs in O(n2 ) time and provides a list of results in all  matches which: (a) ensures that all n teams finish with the same points total, and (b) includes the fewest drawn matches among all lists satisfying (a). Do not write the code, give steps and methods. Explain the steps of algorithm, and the logic behind these steps in plain English.Please give time complexity. list of results mean Any combination of wins, losses and draws. You may wish to view this as a mapping from the set of…
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