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
Using the following execution shown below, explain what is done in each of the ARIES recovery algorithm phases: LSN   LOG 00   begin_checkpoint 10 end_checkpoint 20 update: T1 writes P1 30 update: T2 writes P2 40 update: T3 writes P3 50 T2 commit 60 update: T3 writes P2 70 T2 end 80 update: T1 writes P5 90 T3 abort   CRASH, RESTART In addition to the execution shown here, the system crashes during recovery after writing two log records to stable storage and again after writing another two log records
A new application is being developed and will be using a database that includes a relation about items: Item (item_id:integer, item_name:string, color:string, price:real). Both the purchasing department in charge of obtaining raw material and the manufacturing department in charge of manufacturing the items can change the price of manufactured items according to changes that may happen in the raw material cost or production cost. The two departments use different transactions to update the price of items. The new application uses the following sequences of actions, listed in the order they are submitted to the DBMS: Sequence S1: T1:R(X), T2:W(X), T2:W(Y), T3:W(Y), T1:W(Y), T1:Commit, T2:Commit, T3:Commit Sequence S2: T1:R(X), T2:W(Y), T2:W(X), T3:W(Y), T1:W(Y), T1:Commit, T2:Commit, T3:Commit For each of the following concurrency control mechanisms, describe how they will handle each of the sequences (S1 & S2). Strict 2PL with timestamps used for deadlock prevention. Conservative…
As a database administrator of a large manufacturing organization, you are in charge of their website database that handles suppliers, parts, catalog, customers, and payments of delivered items. The following relations are part of the large database: Supplier(SID, Sname, Saddress, Stelephone)Customer(CID, Cname, Caddress, Ctelephone)Part(PID, Pname, Pmodel, Pcolor)Catalog(SID, PID, Price) (The Catalog relation lists the prices charged for parts by Suppliers). Because the application is web-based and the database is accessed by many users, you want to increase the concurrency usage without compromising the data quality. For each of the following transactions, state the minimum SQL isolation level you would use in order to avoid any conflict problems in them. Please explain your choice. A transaction that adds a new part to a supplier’s catalog. A transaction that increases the price that a supplier charges for a part. A transaction that determines the total number of items for a given…
Knowledge Booster
Background pattern image
Similar questions
SEE MORE QUESTIONS
Recommended textbooks for you
Text book image
Principles of Information Systems (MindTap Course...
Computer Science
ISBN:9781285867168
Author:Ralph Stair, George Reynolds
Publisher:Cengage Learning
Text book image
C++ for Engineers and Scientists
Computer Science
ISBN:9781133187844
Author:Bronson, Gary J.
Publisher:Course Technology Ptr
Text book image
Programming Logic & Design Comprehensive
Computer Science
ISBN:9781337669405
Author:FARRELL
Publisher:Cengage
Text book image
EBK JAVA PROGRAMMING
Computer Science
ISBN:9781337671385
Author:FARRELL
Publisher:CENGAGE LEARNING - CONSIGNMENT
Text book image
EBK JAVA PROGRAMMING
Computer Science
ISBN:9781305480537
Author:FARRELL
Publisher:CENGAGE LEARNING - CONSIGNMENT
Text book image
Systems Architecture
Computer Science
ISBN:9781305080195
Author:Stephen D. Burd
Publisher:Cengage Learning