
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.
-
- Return true
- Check “a” or “b” is greater than 3
- 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
-
- Check “scoreA” is greater than “scoreB”
- 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
- Check “a-b” is greater than or equal to 2
- Otherwise, return false.
-
- Return true
- Check “a” or “b” is equal to 7
- 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.
-
- Increment the “scoreA” value
- Check “random ()” is less than “probA”
- 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.
-
- Return true
- Check “a-b” is greater than or equal to 2
- Check “a” or “b” is greater than or equal to 4
- Define the “printSummary ()” method
- Display the results.
- Call the main method.

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()
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?
Chapter 9 Solutions
Python Programming: An Introduction to Computer Science, 3rd Ed.
- Please no AI! Or if you do use AI, Check the work please! Thank you!arrow_forward(Dynamic Programming.) Recall the problem presented in Assign- ment 3 where given a list L of n ordered integers you're tasked with removing m of them such that the distance between the closest two remaining integers is maxi- mized. See Assignment 1 for further clarification and examples. As it turns out there is no (known) greedy algorithm to solve this problem. However, there is a dynamic programming solution. Devise a dynamic programming solution which determines the maximum distance between the closest two points after removing m numbers. Note, it doesn't need to return the resulting list itself. Hint 1: Your sub-problems should be of the form S(i, j), where S(i, j) returns the maximum distance of the closest two numbers when only considering removing j of the first i numbers in L. As an example if L [3, 4, 6, 8, 9, 12, 13, 15], then S(4, 1) = 2, since the closest two values of L' = [3,4,6,8] are 6 and 8 after removing 4 (note, 8-6 = = 2). = Hint 2: For the sub-problem S(i, j),…arrow_forward
- (Greedy Algorithms) Describe an efficient algorithm that, given a set {x1, x2, . . ., xn} of points on the real line, determines the smallest set of unit-length closed intervals that contains all of the given points. Argue that your algorithm is correct.arrow_forwardWhat does the value of the top variable indicate in this ArrayStack implementation? What will happen if we call pop on this stack? What value will be returned, and what changes will occur in the array and the top variable? 3. If we push the value "echo" onto the stack, where will it be stored in the array, and what will be the new value of top? 4. Explain why index 0 contains the string "alpha" even though top is currently 3. 5. What would the state of the stack look like (values in the array and value of top) after two consecutive pop 0 operations?arrow_forwardPlease solve and show all work. Suppose there are four routers between a source and a destination hosts. Ignoring fragmentation, an IP datagram sent from source to destination will travel over how many interfaces? How many forwarding tables will be indexed to move the datagram from the source to the destination?arrow_forward
- Please solve and show all work. When a large datagram is fragmented into multiple smaller datagrams, where are these smaller datagrams reassembled into a single large datagram?arrow_forwardPlease solve and show all steps. True or false? Consider congestion control in TCP. When the timer expires at the sender, the value of ssthresh is set to one-half of the last congestion window.arrow_forwardPlease solve and show all work. What are the purposes of the SNMP GetRequest and SetRequest messages?arrow_forward
- Please solve and show all steps. Three types of switching fabrics are discussed in our course. List and briefly describe each type. Which, if any, can send multiple packets across the fabric in parallel?arrow_forwardPlease solve and show steps. List the four broad classes of services that a transport protocol can provide. For each of the service classes, indicate if either UDP or TCP (or both) provides such a service.arrow_forwardPlease solve and show all work. What is the advantage of web caches, and how does it work?arrow_forward
- Principles of Information Systems (MindTap Course...Computer ScienceISBN:9781285867168Author:Ralph Stair, George ReynoldsPublisher:Cengage LearningC++ for Engineers and ScientistsComputer ScienceISBN:9781133187844Author:Bronson, Gary J.Publisher:Course Technology PtrProgramming Logic & Design ComprehensiveComputer ScienceISBN:9781337669405Author:FARRELLPublisher:Cengage
- EBK JAVA PROGRAMMINGComputer ScienceISBN:9781337671385Author:FARRELLPublisher:CENGAGE LEARNING - CONSIGNMENTEBK JAVA PROGRAMMINGComputer ScienceISBN:9781305480537Author:FARRELLPublisher:CENGAGE LEARNING - CONSIGNMENTSystems ArchitectureComputer ScienceISBN:9781305080195Author:Stephen D. BurdPublisher:Cengage Learning




