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
EX:[AE00]=fa50h number of ones =1111 1010 0101 0000 Physical address=4AE00h=4000h*10h+AE00h Mov ax,4000 Mov ds,ax; DS=4000h mov ds,4000 X Mov ax,[AE00] ; ax=[ae00]=FA50h Mov cx,10; 16 bit in decimal Mov bl,0 *: Ror ax,1 Jnc ** Inc bl **:Dec cx Jnz * ;LSB⇒CF Cf=1 ; it jump when CF=0, will not jump when CF=1 HW1: rewrite the above example use another way
EX2: Write a piece of assembly code that can count the number of ones in word stored at 4AE00h
Write a program that simulates a Magic 8 Ball, which is a fortune-telling toy that displays a random response to a yes or no question. In the student sample programs for this book, you will find a text file named 8_ball_responses.txt. The file contains 12 responses, such as “I don’t think so”, “Yes, of course!”, “I’m not sure”, and so forth. The program should read the responses from the file into a list. It should prompt the user to ask a question, then display one of the responses, randomly selected from the list. The program should repeat until the user is ready to quit. Contents of 8_ball_responses.txt:  Yes, of course! Without a doubt, yes. You can count on it. For sure! Ask me later. I'm not sure. I can't tell you right now. I'll tell you after my nap. No way! I don't think so. Without a doubt, no. The answer is clearly NO. (You can access the Computer Science Portal at www.pearsonhighered.com/gaddis.)
Knowledge Booster
Background pattern image
Similar questions
SEE MORE QUESTIONS
Recommended textbooks for you
Text book image
C++ for Engineers and Scientists
Computer Science
ISBN:9781133187844
Author:Bronson, Gary J.
Publisher:Course Technology Ptr
Text book image
Operations Research : Applications and Algorithms
Computer Science
ISBN:9780534380588
Author:Wayne L. Winston
Publisher:Brooks Cole
Text book image
C++ Programming: From Problem Analysis to Program...
Computer Science
ISBN:9781337102087
Author:D. S. Malik
Publisher:Cengage Learning
Text book image
CMPTR
Computer Science
ISBN:9781337681872
Author:PINARD
Publisher:Cengage
Text book image
EBK JAVA PROGRAMMING
Computer Science
ISBN:9781305480537
Author:FARRELL
Publisher:CENGAGE LEARNING - CONSIGNMENT
Text book image
Programming Logic & Design Comprehensive
Computer Science
ISBN:9781337669405
Author:FARRELL
Publisher:Cengage