-4

私はクイズを作成しています...そして、答えたい質問の数を人々が選択できるようにしたい..ユーザーがクイズゲームをホストできるようにするアプリケーションのプログラムを作成します。アプリケーションには、短い回答付きの質問のコレクションがあります。プログラムは、ユーザーにゲームに必要な質問の数を尋ねる必要があります。次に、ランダムな順序で多くの質問をします。ユーザーが回答を入力すると、回答と正しい回答が照合され、正解した質問の数が追跡されます。同じ質問を 2 回することはありません。すべての質問が尋ねられるか、ユーザーが (回答として「quit」と入力して) 質問を終了すると、プログラムはスコアと質問の合計数を出力します。

from random import *   #random is a library. we need the randint function from it

    def Main() : 
        Questions = []  # list of all the  questions
        Answers = []    # list of all the answers 
        setup(Questions, Answers)

        while True :
            target = int(input("How many questions do you want to answer? more than 1 and less than 11 "))
            if target <= len(Questions) :
                break
            print("Sorry, I only have ", len(Questions), " in my databank")

      #  alternate version:
      #  target = int(input("How many questions do you want to answer? "))
      #  while target > len(Questions) :
      #  print("Sorry, I only have ", len(Questions), " in my databank")
      #  target = int(input("How many questions do you want to answer? "))
      # 

        score = 0
        numberAsked = 0
        while len(Questions) > 0 :
            qnNum = randint(0, len(Questions)-1)
            correct = askQuestion(Questions[qnNum], Answers[qnNum])
            numberAsked = numberAsked + 1
            if correct == "quit" :
                break
            elif correct :
                score=score+1
            del Questions[qnNum]
            del Answers[qnNum]
        reportScore(score, numberAsked)

    def reportScore(sc, numAsked) :
        print("Thanks for trying my quiz, Goodbye", sc, " questions right out of ", numAsked)


    #asks the user a question, and returns True or False depending on whether they answered correctly.
    # If the user answered with 'q', then it should return "quit"
    def askQuestion (question, correctAnswer):
        print(question)
        answer = input("your answer: ").lower()
        if answer == "quit" :
            return "quit"
        elif answer == correctAnswer.lower() :
            print("Well done, you got it right!")
            return True
        else :
            print("You got it wrong this time!. The correct answer is ", correctAnswer)
            return False

    #  Sets up the lists of questions
    def setup(Questions, Answers) : 
        Questions.append("The treaty of Waitangi was signed in 1901")
        Answers.append("FALSE")
        Questions.append("Aotearoa commonly means Land of the Long White Cloud")
        Answers.append("TRUE") 
        Questions.append("The Treaty of Waitangi was signed at Parliament")
        Answers.append("FALSE")
        Questions.append("The All Blacks are New Zealands top rugby team")
        Answers.append("TRUE")
        Questions.append("Queen Victoria was the reigning monarch of England at the time of the Treaty")
        Answers.append("TRUE")
        Questions.append("Phar Lap was a New Zealand born horse who won the Melbourne Cup")
        Answers.append("TRUE")
        Questions.append("God Save the King was New Zealand’s national anthem up to and including during WWII")
        Answers.append("TRUE")
        Questions.append("Denis Glover wrote the poem The Magpies")
        Answers.append("TRUE")
        Questions.append("Te Rauparaha is credited with intellectual property rights of Kamate!")
        Answers.append("FALSE")
        Questions.append("Kiri Te Kanawa is a Wellington-born opera singer")
        Answers.append("FALSE")

    Main()
4

1 に答える 1

1

主な問題はあなたのwhileループにあります - あなたは何もしていませんtarget. 提案された変更に夢中になることなく、whileループの周りのコードを次のように置き換えてみてください。

score = 0
numberAsked = 0
while numberAsked < target:
    qnNum = randint(0, len(Questions))
    correct = askQuestion(Questions[qnNum], Answers[qnNum])
    numberAsked = numberAsked + 1
    if correct == "quit" :
        break
    elif correct :
        score=score+1
    del Questions[qnNum]
    del Answers[qnNum]

numberAskedが より小さい間、これはループしますtarget。現在の問題は、ループがリストの長さによって管理されていることです。Questionsリストの長さは 10 から始まり、反復ごとに 1 ずつ減少します。したがって、あなたが何であってtargetも、ループはすべての質問を循環します。

于 2012-11-27T08:21:30.243 に答える