0

10 問のトリビア ゲームの制作を依頼されました。各質問はランダムに選択する必要があります。Python は 4 つの質問ごとに、ユーザーがもう一度プレイしたいかどうか尋ねます。ユーザーが「はい」と言った場合は再び続行し、「いいえ」と言った場合は終了します。ゲームがそれ以上質問がないという点に達した場合、謝罪してプログラムを終了する必要があります。

2 つの問題があります。現在、私の playAgain() 関数を使用していないようです。また、「NameError: global name 'rounds' is not defined」というエラーが表示されますが、これも正しい変数に対して発生します。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!")
4

2 に答える 2

1

変数roundsは関数で定義され、そのmainobject()関数に対してローカルです。その関数の外からアクセスすることはできません。

簡単な修正の 1 つroundsは、playagain() 関数に渡すことです。

したがって

def playagain(rounds):
...


def mainobject():
....
playagain(rounds)
于 2013-10-11T20:46:01.060 に答える
1

コメントを外す必要があります

rounds = 0  # at the top

と挿入

global rounds 

関数で。メインでラウンド (ローカル) をインクリメントしていますが、playAgain のラウンドは未定義です。

問題を解決する他の方法があります。しかし、これはおそらく最も迅速で理解しやすいものです。

于 2013-10-11T20:43:47.287 に答える