Python初学者-多项选择测验程序遇到问题

时间:2020-02-04 22:49:35

标签: python python-3.x

此处使用3.8.1的Python初学者。

我目前正在研究一个分为两部分的多项选择测验程序。第一部分允许用户创建一系列问题和答案,并使用Pickle模块将其保存。第二部分允许用户加载其保存的数据并被程序查询。

我的问题是,在程序的第二部分中,我想分别显示每个问题的多项选择选项,但是我的程序最终将显示每个问题的多项选择,而不仅仅是当前问题程序询问。

这是什么原因以及如何解决!

谢谢您的帮助!

#this is part one of the program, where the user creates and saves their data
def PartOne():
        import pickle
        import os
        from time import sleep
        os.system('cls')

        while True:
                t = input("How many questions do you have? : ")
                if t.isnumeric():
                        break
                else:
                        print("Please enter a valid number.")

        cx = list()
        ci = list()
        co = list()

        for i in range(0, int(t)):
            c = input("Please enter the question : ")
            ca = input("Please enter option A : ")
            cb = input("Please enter option B : ")
            cc = input("Please enter option C : ")
            cd = input("Please enter option D : ")
            while True:
                m = input("What option coresponds to the correct answer (a, b, c or d) : ")
                if m.lower() in ('a', 'b', 'c', 'd'):
                        cm = {"question": c, "answer": m}
                        cx.append(cm)
                        ch = {"option a": ca, "option b": cb, "option c": cc, "option d": cd}
                        ci.append(ch)
                        cu = {"question": cx, "answer": ci}
                        co.append(cu)
                        break
                else:
                    print("Invalid answer. Please enter «a», «b», «c» or «d»")

        while True:
                question_cm = input("Would you like to save? (yes or no) ")
                if question_cm.lower() in ('yes'):
                        pickle.dump(cx, open("Savedataone.dat", "wb"))
                        pickle.dump(ci, open("Savedatatwo.dat", "wb"))
                        pickle.dump(co, open("Savedatathree.dat", "wb"))
                        print("Saved!")
                        sleep(1.2)
                        break
                if question_cm.lower() in ('no'):
                        print ("Please save to use this information.")
                        sleep(1.2)
                        break
                else:
                        print("Invalid answer. Please enter yes or no.")

#This the second part of the program where the user uses what they inputed in part 1 to quiz themselves

def PartTwo():
        import pickle
        import random
        import os
        from time import sleep
        os.system('cls')

        while True:
                person = input("How much people will participate in this study session? : ")
                if person.isnumeric():
                        break
                else:
                        print("Please enter a valid answer.")

        for i in range(0, int(person)): 

                os.system('cls')
                cx = pickle.load(open("Savedataone.dat", "rb"))
                ci = pickle.load(open("Savedatatwo.dat", "rb"))
                co = pickle.load(open("Savedatathree.dat", "rb"))
                print("Study session will begin soon...")
                sleep(2)

                for cm in cx:
                        random.shuffle(cx)
                        print(cm["question"])
                        print(ci)
                        response = input("What was the correct answer (a, b, c or d)? : ")
                        if (response == cm["answer"]):
                                print("Good!")
                                continue
                        else:
                                print("Wrong...")
                                sleep(0.2)
                                print("The correct answer was", cm, ".")
                                continue
                        print("Study session is now over.")
                        sleep (1)
                print("Next person's study session will begin soon if needed.")
                sleep(1)
                print("Verification...")
                sleep(2.5)

        sleep(1.35)
        print("Study session is now over.") 

1 个答案:

答案 0 :(得分:2)

将当前的partTwo()函数替换为:

def PartTwo():
        import pickle
        import random
        import os
        from time import sleep
        os.system('cls')

        while True:
                person = input("How much people will participate in this study session? : ")
                if person.isnumeric():
                        break
                else:
                        print("Please enter a valid answer.")

        for i in range(0, int(person)):

                os.system('cls')
                cx = pickle.load(open("Savedataone.dat", "rb"))
                ci = pickle.load(open("Savedatatwo.dat", "rb"))
                co = pickle.load(open("Savedatathree.dat", "rb"))
                print("Study session will begin soon...")
                sleep(2)
                questionNumber=0
                for cm in cx:
                        random.shuffle(cx)
                        print(cm["question"])
                        print(ci[questionNumber])
                        response = input("What was the correct answer (a, b, c or d)? : ")
                        if (response == cm["answer"]):
                                print("Good!")
                                questionNumber += 1
                                continue
                        else:
                                print("Wrong...")
                                sleep(0.2)
                                print("The correct answer was", cm, ".")
                                questionNumber+=1
                                continue

                        print("Study session is now over.")
                        sleep (1)
                print("Next person's study session will begin soon if needed.")
                sleep(1)
                print("Verification...")
                sleep(2.5)

        sleep(1.35)
        print("Study session is now over.")

我注意到您在'ci'中附加了PartOne()中的所有答案,但是在partTwo()中,您仅打印ci而未指定哪个部分可以打印所有内容。

我添加了一个计数器(questionNumber)来跟踪当前提出的问题,该计数器用于指定要给出的可能答案。