Python Programming: An Introduction to Computer Science
Python Programming: An Introduction to Computer Science
3rd Edition
ISBN: 9781590282779
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
Implement a C program to find the largest element in a given array. You must have a main function and a max function. The function int main() will declare an array with the values {12, 100, 10, 1000, 20, 5}. This array will be passed to the max function. The function int max() will perform the necessary operations to find the largest element of the array. After max () is finished, have main () print the largest value and its index in the array. Do not hard code your solution! If we test your code with different array values, we should still get the correct output. The following link may help you get started: https://www.tutorialspoint.com/cprogramming/c_function_call_by_reference.htm
Please run the following program and answer the questions. #include int main(void) { int arr[6] = int *pointer pointer *pointer = {10, 20, 30, 40, 50, 60}; = &arr[0]; pointer + 2; = 5 ; pointer++; *pointer - (*pointer) 5 ; pointer++; *pointer * (pointer+1) - 5%; return 0; 1. [10 pts] Please list the values of elements in array arr after line 8 (*pointer why. = 5; ) and explain
> Comparable Method - methodName: String -priority: int + Method() + Method(methodName: String, priority: int) + abstract specificWay(): void + Getters and setters for all fields compareTo(otherMethod: Method): int + toString(): String ReadMethod - language: String + ReadMethod() + ReadMethod(methodName: String, priority: int, language: String) + specificWay(): void + Getters and setters for language + toString(): String Part 1.1. Implement the abstract class Method implements Comparable interface according to its UML diagram. Add comments stating where data fields, constructors, toString(), and other methods are (if any). Neither method should have an empty body unless abstract methods. 1. two constructors (default and the constructor with all fields) 2. getters and setters for all fields (methodName and priority). 3. toString() method: modify by yourself to match the example output. 4. Abstract method void specificWay(). 5. Implement compara To(Method otherMethod) to compare…
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