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 6PE
Program Plan Intro

Simulates the tennis game

Program Plan:

  • Import the header file.
  • Define the “main” method.
    • Call the “printIntro ()” method
    • Call the “getInputs ()” method.
    • Call the “simNMatches ()” method.
    • Call the “printSummary ()” method.
  • Define the “printIntro()” method.
    • Print the intro statements.
  • Define the “getInputs()” method.
    • Get the player A possible for win from the user.
    • Calculate the “probA” and “probB” values.
    • Get how many games to simulate from the user.
  • Define the “simNMatches()” method.
    • Set the values
    • Iterate “i” until it reaches “n” value
      • Call the methods
      • Check “matchA” is greater than “matchB”
        • Increment the “winsA” value
      • Otherwise, increment the “winsB” value.
      • Return the values.
  • Define the “simOneMatch ()” method
    • Set the values
    • Check the condition.
      • Call the “simOneGame ()” method.
      • Check “setA” is greater than “setB”
        • Increment the “matchA” value
      • Otherwise, increment the “matchB” value
      • Return the results
  • Define the “matchOver ()” method
    • Check “a” or “b” is greater than 3
      • Return true
          • Otherwise, return false.
  • Define the “simOneSet ()” method
    • Call the method
    • Set the values
    • Check the condition.
      • Check “scoreA” is greater than “scoreB”
        • Increment the “setA” value
      • Otherwise, increment the “setB” value
          • Return the results
  • Define the “setOver ()” method
    • Check “a” or “b” is equal to 7
      • Return true
          • Check “a” or “b” is greater than or equal to 6
            • Check “a-b” is greater than or equal to 2
              • Return true
            • Otherwise, return false
          • Otherwise, return false.
  • Define the “simOneGame ()” method
    • Set the values
    • Check the condition
      • Check “random ()” is less than “probA”
        • Increment the “scoreA” value
            • Otherwise, increment the “scoreB” value
          • Return the results.
  • Define the “gameOver ()” method
    • Check “a” or “b” is greater than or equal to 4
      • Check “a-b” is greater than or equal to 2
        • Return true
            • Otherwise, return false
          • Otherwise, return false.
  • Define the “printSummary ()” method
    • Display the results.
  • Call the main method.

Expert Solution & Answer
Check Mark
Program Description Answer

The program is to simulate a game of tennis.

Explanation of Solution

Program:

#import the header file

from random import random

#definition of main method

def main():

    #call the method

    printIntro()

    #call the method and store it in the variables

    probA, probB, n = getInputs()

    #call the method and store it in the variables

    winsA, winsB = simNMatches(n, probA, probB)

    #call the method

    printSummary(winsA, winsB, n)

#definition of "printIntro" method

def printIntro():

    #display the statements

    print("This program simulates a series of tennis matches between player")

    print('"A" and player "B". The abilities of each player are')

    print("represented by percentage chance of winning a volley. The")

    print("percentages add up to 100.")

    print()

    print("Game")

    print("As in real tennis, each game is played through 4 points")

    print("(Love, 15, 30, 40, game) where the player must win by two.")

    print("Players can score on either serve.")

    print()

    print("Set")

    print("A set is won when a player reaches 6 victorious games, and has a")

    print("lead of two. If for example, sets reach 6-5, the players will play")

    print("another round. If the score reaches 6-6, there will be a")

    print("tiebreaking game.")

    print()

    print("Match")

    print("A Match is won when a player reaches his/her 3rd victorious set.")

    print("No winning by two, no tie-breaker, for the purposes of this simulation")

    print()

#definition of "getInputs" method

def getInputs():

    #get the player A wins a serve

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

    #calculate the values

    probA = probA / 100

    probB = 1 - probA

    #get the input from the user

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

    return probA, probB, n

#definition of "simNMatches" method

def simNMatches(n, probA, probB):

    #set the values

    winsA = winsB = 0

    #iterate until "n" value

    for i in range(n):

        #call the method and store it in the variables

        matchA, matchB = simOneMatch(probA, probB)

        #check "matchA" is greater than "matchB"

        if matchA > matchB:

            #increment the value

            winsA = winsA + 1

        #otherwise      

        else:

            #increment the value

            winsB = winsB + 1

    #return the results

    return winsA, winsB

#definition of "simOneMatch" method

def simOneMatch(probA, probB):

    #set the values

    matchA = matchB = 0

    #check the condition

    while not matchOver(matchA, matchB):

        #call the method and store it in the variables

        setA, setB = simOneSet(probA, probB)

        #check "setA" is greater than "setB"

        if setA > setB:

            #increment the value

            matchA = matchA + 1

        #otherwise

        else:

            #increment the value

            matchB = matchB + 1

    #return the results

    return matchA, matchB

#definition of "matchOver" method

def matchOver(a, b):

    #check "a" or "b" is greater than 3

    if a > 3 or b > 3:

        #return the result

        return True

    else:

        #return the result

        return False

#definition of "simOneSet" method

def simOneSet(probA, probB):

    #call the method and store it in the variables

    scoreA, scoreB = simOneGame(probA, probB)

    #set the values

    setA = setB = 0

    #check the condition

    while not setOver(setA, setB):

        #check "scoreA" is greater than "scoreB"

        if scoreA > scoreB:

            #increment the value

            setA = setA + 1

        else:

            #increment the value

            setB = setB + 1

    #return the results

    return setA, setB

#definition of "setOver" method

def setOver(a, b):

    #check "a" and "b" is equal to 7

    if a == 7 or b == 7:

        #return the result

        return True

    #check "a" or "b" is greater than or equal to 6

    elif a >= 6 or b >= 6:

        #check "a - b" is greater than or equal to 2

        if abs(a-b) >=2:

            #return the result

            return True

        else:

            #return the result

            return False

    else:

        #return the result

        return False

#definition of "simOneGame" method

def simOneGame(probA, probB):

    #set the values

    scoreA = scoreB = 0

    #check the condition

    while not gameOver(scoreA, scoreB):

        #check "random()" is less than "probA"

        if random() < probA:

            #increment the value

            scoreA = scoreA + 1

        else:

            #increment the value

            scoreB = scoreB + 1

    #return the result

    return scoreA, scoreB

#definition of "gameOver" method

def gameOver(a, b):

    #check "a" or "b" is greater than or equal to 4

    if a >= 4 or b >= 4:

        #check "a - b" is greater than or equal to 2

        if abs(a-b) >=2:

            #return the result

            return True

        else:

            #return the result

            return False

    else:

        #return the result

        return False

#definition of "printSummary" method

def printSummary(winsA, winsB, n):

    #display the results

    print("\nGames simulated: ", n)

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

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

#call the main method

if __name__ == '__main__': main()

Sample Output

Output:

This program simulates a series of tennis matches between player

"A" and player "B". The abilities of each player are

represented by percentage chance of winning a volley. The

percentages add up to 100.

Game

As in real tennis, each game is played through 4 points

(Love, 15, 30, 40, game) where the player must win by two.

Players can score on either serve.

Set

A set is won when a player reaches 6 victorious games, and has a

lead of two. If for example, sets reach 6-5, the players will play

another round. If the score reaches 6-6, there will be a

tiebreaking game.

Match

A Match is won when a player reaches his/her 3rd victorious set.

No winning by two, no tie-breaker, for the purposes of this simulation

What is the percent prob. player A wins a volley? 50

How many games to simulate? 10

Games simulated:  10

Wins for A: 7 (70.0%)

Wins for B: 3 (30.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
Do you have any real-world examples of discrete event simulation?
JAVA PROGRAMMING OBJECT-ORIENTED PROGRAMMINGCreate a model of a scene of your choosing by making use of the composite pattern. It may be a scene from a photograph, or it could be from a simulator, or it could be from a movie, or it could be from a videogame, etc.
There are two problems that simulation models can help us understand.
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