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
bartleby

Videos

Question
Book Icon
Chapter 9, Problem 5PE
Program Plan Intro

Simulates the volleyball game

Program Plan:

  • Import the header file.
  • Define the “main” method.
    • Call the “printIntro ()” method
    • Call the “getInputs ()” method.
    • Call the “normalVolley ()” method.
    • Call the “rallyVolley ()” 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.
    • Get the player B possible for win from the user.
    • Get how many games to simulate from the user.
  • Define the “normalVolley()” method.
    • Set the values
    • Iterate “i” until it reaches “n” value
      • Call the method
      • Check “scoreA” is greater than “scoreB”
        • Increment the “winsA” value
      • Otherwise, increment the “winsB” value.
      • Return the value.
  • Define the “simOneMatch ()” method
    • Set the values
    • Check “winsA” and “winsB” is not equal to 2
      • Call the “simOneGame ()” method.
      • Check “scoreA” is greater than “scoreB”
        • Increment the “winsA” value
        • Increment the “x” value
      • Otherwise, increment the “winsB” value
        • Increment the “x” value
      • Return the result
  • Define the “simOneGame ()” method
    • Call the “findService ()” method
    • Set the values
    • Check the condition
      • If “serving” is equal to “A”
        • Check “random ()” is less than “probA”
          • Increment the “scoreA” value
        • Otherwise, set the value
      • Check “serving” is equal to “B”
        • Check “random ()” is less than “probB”
        • Increment the “scoreB” value
      • Otherwise, set the value.
      • Return the results.
  • Define the “findService ()” method
    • Check result of “x%2” is equal to 0
      • Return “A”
            • Otherwise, return “B”.
  • Define the “gameOver ()” method
    • Check “a” or “b” is greater than 15
      • Check “a-b” is greater than or equal to 2
        • Return true.
      • Otherwise, return false.
            • Otherwise, return false.
  • Define the “rallyVolley()” method.
    • Set the values
    • Iterate “i” until it reaches “n” value
      • Call the method
      • Check “scoreA” is greater than “scoreB”
        • Increment the “winsA” value
      • Otherwise, increment the “winsB” value.
      • Return the value.
  • Define the “simOneGame ()” method
    • Call the “findService ()” method
    • Set the values
    • Check the condition
      • If “serving” is equal to “A”
        • Check “random ()” is less than “probA”
          • Increment the “scoreA” value
        • Otherwise, set the value.
          • Increment the “scoreB” value.
      • Check “serving” is equal to “B”
        • Check “random ()” is less than “probB”
        • Increment the “scoreB” value
      • Otherwise, set the value.
        • Increment the “scoreA” value.
      • Return the results.
  • Define the “findService ()” method
    • Check result of “x%2” is equal to 0
      • Return “A”
            • Otherwise, return “B”.
  • Define the “gameOver ()” method
    • Check “a” or “b” is greater than 25
      • 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.
    • Calculate the “devA” and “devB” values
    • Check the condition.
      • Check “devA” is greater than 0
        • Display the result
      • Check “devA” is less than 0
        • Display the result.
      • Otherwise, display scoring difference
      • Check “devB” is greater than 0
        • Display the result.
      • Check “devB” is less than 0
        • Display the result
  • Call the main method.

Expert Solution & Answer
Check Mark
Program Description Answer

The program is to simulate a game of volleyball and investigate whether rally scoring reduces, magnifies, or has no effect on the relative advantage enjoyed by the better team.

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()

    winsA1, winsB1 = normalVolley(n, probA, probB)

    winsA2, winsB2 = rallyVolley(n, probA, probB)

    #call the method

    printSummary(winsA1, winsB1, winsA2, winsB2, n)

#definition of "printIntro" method

def printIntro():

    #display the statements

    print("This program is designed to compare the difference between Normal")

    print("and Rally scoring in a simulation of (n) games of Volleyball")

    print("given a probability (a number between 0 and 1) that reflects the")

    print("likelihood of a team winning the serve.")

#definition of "getInputs" method

def getInputs():

    #get the player A wins a serve

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

    #get the player B wins a serve

    b = eval(input("What is the prob. player B wins a serve? "))

    #get the input from the user

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

    #return the values

    return a, b, n

#definition of "normalVolley" method

def normalVolley(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

        scoreA, scoreB = simOneGame(probA, probB, n)

        #check "scoreA" is greater than "scoreB"

        if scoreA > scoreB:

            #increment the value

            winsA = winsA + 1

        #otherwise

        else:

            #increment the value

            winsB = winsB + 1

    #return the results

    return winsA, winsB

#definition of "simOneGame" method

def simOneGame(probA, probB, n):

   #call the method

    serving = findService(n)

    #set the values

    scoreA = 0

    scoreB = 0

    #check the condition

    while not gameOver(scoreA, scoreB):

        #check "serving" is equal to "A"

        if serving == "A":

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

            if random() < probA:

                #increment the value

                scoreA = scoreA + 1

            #otherwise

            else:

                #set the value

                serving = "B"

        #check "serving" is equal to "B"

        if serving == "B":

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

            if random() < probB:

                #increment the value

                scoreB = scoreB + 1

            #otherwise

            else:

                #set the value

                serving = "A"

    #return the result

    return scoreA, scoreB

#definition of "findService" method

def findService(x):

    #check the condition

    if x % 2 == 0:

        #return the value

        return "A"

    #otherwise

    else:

        #return the value

        return "B"

#definition of "gameOver" method

def gameOver(a, b):

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

    if a > 15 or b > 15:

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

        if abs(a-b) >= 2:

            #return the value

            return True

        #otherwise

        else:

            #return the value

            return False

    #otherwise

    else:

        #return the value

        return False

#definition of "rallyVolley" method

def rallyVolley(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

        scoreA, scoreB = simOneGame(probA, probB, n)

        #check "scoreA" is greater than "scoreB"

        if scoreA > scoreB:

            #increment the value

            winsA = winsA + 1

        #otherwise

        else:

            #increment the value

            winsB = winsB + 1

    #return the results

    return winsA, winsB

#definition of "simOneGame" method

def simOneGame(probA, probB, n):

   #call the method

    serving = findService(n)

    #set the values

    scoreA = 0

    scoreB = 0

    #check the condition

    while not gameOver(scoreA, scoreB):

        #check "serving" is equal to "A"

        if serving == "A":

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

            if random() < probA:

                #increment the value

                scoreA = scoreA + 1

            #otherwise

            else:

                #set the value

                serving = "B"

                #increment the value

                scoreB = scoreB + 1

        #check "serving" is equal to "B"

        if serving == "B":

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

            if random() < probB:

                #increment the value

                scoreB = scoreB + 1

            #otherwise

            else:

                #set the value

                serving = "A"

                #increment the value

                scoreA = scoreA + 1

    #return the result

    return scoreA, scoreB

#definition of "findService" method

def findService(x):

    #check the condition

    if x % 2 == 0:

        #return the value

        return "A"

    #otherwise

    else:

        #return the value

        return "B"

#definition of "gameOver" method

def gameOver(a, b):

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

    if a > 25 or b > 25:

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

        if abs(a-b) >= 2:

            #return the value

            return True

        #otherwise

        else:

            #return the value

            return False

    #otherwise

    else:

        #return the value

        return False

#definition of "printSummary" method

def printSummary(winsA1, winsB1, winsA2, winsB2, n):

    #display the results

    print("\nGames simulated: ", n)

    print("Results for Normal Volleyball to 15, score on own serve.")

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

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

    print()

    print("Results for Rally Volleyball to 25, score on any serve.")

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

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

    print()

    #calculate the "devA" value

    devA = (winsA2/n - winsA1/n)

    #calculate the "devB" value

    devB = (winsB2/n - winsB1/n)

    #check the condition

    if (winsA1 > winsB1) and (winsA2 > winsB2):

        #check "devA" greater than 0

        if devA > 0:

            #display the result

            print("Team A's advantage was magnified {0:0.1%} in their favor".format(devA))

            print("during the rally scoring match.")

        #check "devA" less than 0

        elif devA < 0:

             #display the result

            print("Team A's advantage was reduced {0:0.1%} in their favor".format(abs(devA)))

            print("during the rally scoring match.")

        #otherwise

        else:

             #display the result

            print("The scoring differences were not statistically significant.")

    #check the condition

    elif (winsB1 > winsA1) and (winsB2 > winsA2):

        #check "devB" greater than 0

        if devB > 0:

             #display the result

            print("Team B's advantage was magnified {0:0.1%} in their favor".format(devB))

            print("during the rally scoring match.")

        #check "devB" less than 0

        elif devB < 0:

             #display the result

            print("Team B's advantage was reduced {0:0.1%} in their favor".format(abs(devB)))

            print("during the rally scoring match.")

        #otherwise

        else:

             #display the result

            print("The scoring differences were not statistically significant.")

    #otherwise

    else:

         #display the results

        print("Neither team's advantage was statistically significant.")

        print("If the initial probabilities were near equal, it is impossible to")

        print("derive significance from the data.")

        print("Try a larger sample size.")

if __name__ == '__main__': main()

Sample Output

Output:

This program is designed to compare the difference between Normal

and Rally scoring in a simulation of (n) games of Volleyball

given a probability (a number between 0 and 1) that reflects the

likelihood of a team winning the serve.

What is the prob. player A wins a serve? 0.65

What is the prob. player B wins a serve? 0.6

How many games to simulate? 5000

Games simulated:  5000

Results for Normal Volleyball to 15, score on own serve.

Wins for A: 3312 (66.2%)

Wins for B: 1688 (33.8%)

Results for Rally Volleyball to 25, score on any serve.

Wins for A: 3325 (66.5%)

Wins for B: 1675 (33.5%)

Team A's advantage was magnified 0.3% in their favor

during the rally scoring match.

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
Lab 07: Java Graphics (Bonus lab) In this lab, we'll be practicing what we learned about GUIs, and Mouse events. You will need to implement the following: ➤ A GUI with a drawing panel. We can click in this panel, and you will capture those clicks as a Point (see java.awt.Point) in a PointCollection class (you need to build this). о The points need to be represented by circles. Below the drawing panel, you will need 5 buttons: о An input button to register your mouse to the drawing panel. ○ о о A show button to paint the points in your collection on the drawing panel. A button to shift all the points to the left by 50 pixels. The x position of the points is not allowed to go below zero. Another button to shift all the points to the right 50 pixels. The x position of the points cannot go further than the You can implement this GUI in any way you choose. I suggest using the BorderLayout for a panel containing the buttons, and a GridLayout to hold the drawing panel and button panels.…
If a UDP datagram is sent from host A, port P to host B, port Q, but at host B there is no process listening to port Q, then B is to send back an ICMP Port Unreachable message to A. Like all ICMP messages, this is addressed to A as a whole, not to port P on A. (a)  Give an example of when an application might want to receive such ICMP messages. (b)  Find out what an application has to do, on the operating system of your choice, to receive such messages. (c)  Why might it not be a good idea to send such messages directly back to the originating port P on A?
Discuss how business intelligence and data visualization work together to help decision-makers and data users. Provide 2 specific use cases.
Knowledge Booster
Background pattern image
Computer Science
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
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
A+ Guide To It Technical Support
Computer Science
ISBN:9780357108291
Author:ANDREWS, Jean.
Publisher:Cengage,
Text book image
Principles of Information Systems (MindTap Course...
Computer Science
ISBN:9781285867168
Author:Ralph Stair, George Reynolds
Publisher:Cengage Learning
Text book image
Systems Architecture
Computer Science
ISBN:9781305080195
Author:Stephen D. Burd
Publisher:Cengage Learning
Text book image
Programming Logic & Design Comprehensive
Computer Science
ISBN:9781337669405
Author:FARRELL
Publisher:Cengage
The Top Down Approach to Software Development; Author: Christopher Kalodikis;https://www.youtube.com/watch?v=v9M8LA2uM48;License: Standard YouTube License, CC-BY