I'm working through Python Programming by Zelle. I've entered the code for the racquetball problem in Chapter 9 exactly as written in the text. (At least I think so.) The program returns one game only then quits. I've prototyped and unit tested but can't find my mistake. Any insights would be helpful. Here is my code:

From random import random
def main():
    #print and introduction
    #get the inputs:  probA, probB,n
    #simulate n games of racquetball using probA and probB
    winsA, winsB=simNGames(n,probA,probB)
    #print a report on the wins for playerA and playerB

def printIntro():
    print("This program simulates a game of racquetball between two")
    print("players called A and B.  The abilities of each player are")
    print("indicated by a probability(a number between 0 and 1) that")
    print("the player wins the point when serving.  Player A always")
    print("has the first serve.")

def getInputs():
    #returns the three simulation parameters, probA, probB and n
    a=eval(input("What is the probability playerA wins a serve?  "))
    b=eval(input("What is the probability playerB wins a  serve?  "))
    n=eval(input("How many games do you want to simulate?  "))
    return a,b,n

def simNGames(n,probA, probB):
    #Initialize winsA and winsB to 0
    #loop n times
    for i in range(n):
        #simulate a game
        scoreA, scoreB=simOneGame(probA, probB)
        #if playerA wins
        if scoreA>scoreB:
            #Add one to wins A
        return winsA, winsB

def simOneGame(probA, probB):
    #initialize scores to 0
    #set serving to A
    #Loop while the game is not over:
    while not gameOver(scoreA,scoreB):
        if serving=="A":
            if random()<probA:
            if random()<probB:
    return scoreA, scoreB

def gameOver(a,b):
    #a and b represent scores for a racquetball game
    #Returns True if the game is over, False otherwise.
    return a==15 or b==15

def printSummary(winsA,winsB):
    #prints a summary of wins for each player
    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))

Recommended Answers

Typically that means that a return statement is indented incorrectly. Check all of your return statements.

Jump to Post

All 4 Replies

Typically that means that a return statement is indented incorrectly. Check all of your return statements.

Will do. thank you.

Yes, that was the problem. It worked immediately. Hours and hours of head-banging were resolved by one proper indent. Grin. Thanks again.

We've all been there.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.