我被要求制作一个有10个问题的琐事游戏。每个问题都应该随机挑选。如果用户想要再次播放,Python应该询问的每四个问题。如果用户说“是”,那么它会再次继续,如果他们说“不”则结束。如果游戏达到了没有其他问题的程度,它应该道歉并结束该计划。
我有两个问题。现在它似乎没有使用我的playAgain()函数。它也给了我这个错误,“NameError:全局名称'轮次'没有定义”这也是正确的变量。我不确定如何在mainObject()之外定义它们而不修改它们在mainObject()中获得的数据。
我该怎么办?
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!")
答案 0 :(得分:1)
您需要取消注释
rounds = 0 # at the top
并插入
global rounds
在函数中。你在main中递增轮次(本地),但是playAgain中的轮次是未定义的。
还有其他方法可以解决问题。但这可能是最快,最容易理解的。
答案 1 :(得分:1)
变量rounds
在mainobject()
函数中定义,并且是该函数的本地变量。它无法从该函数外部访问。
一个简单的解决方法是将rounds
传递给playagain()函数
从而
def playagain(rounds):
...
def mainobject():
....
playagain(rounds)