简体   繁体   中英

Python Errors: Correct is not defined. Trivia Game

I'm asked to produce a trivia game that has 10 questions. Each question should be picked at random. Every four questions Python should ask if the user wants to play again. If the user says "yes" then it continues again, if they say "no" it ends. If the game reaches the point that there are no more questions it should apologize and end the program.

I have two issues. Right now it doesn't seem to be using my playAgain() function. It also is giving me this error, "NameError: global name 'rounds' is not defined" this also comes up for the correct variable. I'm not sure how I can define these outside the mainObject() without modifying the data that they obtain in mainObject().

What should I do?

import random, sys

question1 = "In which US state would you find the zip code 12345?"
question2 = "What never works at night and requires a gnomon to tell the time?"
question3 = "What color is a polar bear's skin?"
question4 = "What is Indiana Jones' first name?"
question5 = "Which is bigger, the state of Florida or England?"
question6 = "How many white stripes are there on the American flag?"
question7 = "How many daily tides are there?"
question8 = "Which country has the longest coastline?"
question9 = "How many of the gifts in the song 'The Twelve Days of Christmas' do not     involve birds?"
question10 = "It occurs once in a minute Twice in a week and once in a year what is it?"

answer1 = "New York"
answer2 = "Sundial"
answer3 = "Black"
answer4 = "Henry"
answer5 = "Florida"
answer6 = "Six"
answer7 = "Two"
answer8 = "Canada"
answer9 = "Six"
answer10 = "E"


Questions = [question1, question2, question3,
      question4, question5, question6,
      question7, question8, question9, question10]


Answers = [answer1, answer2, answer3, answer4,
   answer5, answer6, answer7, answer8, answer9,
   answer10]

print ("Welcome to the Dynamic Duo's WJ Trivia Game!!")
print ("Press \"enter\" to play.")

input()


last = len(Questions)-1
#rounds = 0
#correct = 0
playagain = " "

def playAgain():
    if (rounds == 4 or rounds == 8):
            print("Do you want to play another round? (Yes or No)")
            playAgain = input()
            accept = "Yes"
            if PlayAgain.lower() == accept.lower():
                    mainObject()
            else:
                    sys.quit()


def mainObject():
    correct = 0
    last = len(Questions)-1
    rounds = 0
    playagain = "yes"
    while (last>=0):  #This continually checks to make sure that there is a new question
            randomQuestion = random.randint(0, last)
            rounds += 1

            print ("Round " + str(rounds))
            print (Questions[randomQuestion])
            userAnswer = input()
            questionAsked = (Questions[randomQuestion])
            answerRequired = (Answers[randomQuestion])
            isitcorrect = False
            if answerRequired.lower() == userAnswer.lower():
                    isitcorrect = True
            if isitcorrect == True:
                    print("Good job! You got the correct answer of " + Answers[randomQuestion])
                    correct += 1
                    print("You have " + str(correct) + " points.")
            else: print("Too bad, you got it wrong.  The correct answer is " + answerRequired)        
            Questions.remove(questionAsked)
            Answers.remove(answerRequired)
            last = len(Questions)-1
            playAgain()                                

mainObject()

print("I'm sorry, there are no more trivia questions.  Your total score is " +   str(correct))
print("Thanks for playing!")

You need to uncomment

rounds = 0  # at the top

and insert

global rounds 

in the functions. You are incrementing rounds (local) in main, but rounds in playAgain is undefined.

There are other ways to solve the problem. But this is likely the quickest, and easiest to understand.

The variable rounds is defined in the mainobject() function, and is local to that function. It is not accessible from outside of that function.

One simple fix would be to pass rounds to the playagain() function

thus

def playagain(rounds):
...


def mainobject():
....
playagain(rounds)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM