使用列表在python中进行测验

时间:2015-08-03 23:31:55

标签: python list

我正在尝试用Python进行测验。我发现许多教程使用print(“问题”)打印问题,但我认为这需要花费大量时间来编写。我将所有问题都保存在文本文档中。我不能列出清单并从文件中导入问题吗? 像infile =“questions.txt”,“r”)

我知道这适用于简单的列表,例如(苹果,橙子,香蕉),但如果问题是多行的,就像多项选择题一样,那么它在列表中是如何工作的?

另外,我想我可以有一个单独的答案列表,所以问题[2]会与答案[2]等相匹配。这个列表很容易,因为它们是单个字母。

任何帮助和建议将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:2)

一种简单的方法是在问题之间添加一个空行来创建文件。

with open("questions.txt", "rU") as infile:
    questions = infile.read().split("\n\n")

答案 1 :(得分:0)

您可以使用以下格式将所有问题和答案存储在文本文件中。文件中的每一行可以包含一个问题,一个正确答案和一个可能答案列表。例如:

What is 1+1 2   2   4   6   8
Subtract 5 from 25, what do you get 20  10  30  25  20  12

因此,对于第一行,您有问题,2的答案和四个可能的答案。

每个部分后添加tab个字符。然后可以使用Python的CSV库将每个问题读入列表。从此列表中,您可以随机选择一个测验问题,如下所示:

import csv, random

with open("questions.csv", "r") as f_input:
    csv_input = csv.reader(f_input, delimiter="\t")
    quiz = list(csv_input)

while True:
    # Choose a random question from the quiz
    question = random.choice(quiz)
    print "%s?" % (question[0])

    while True:
        # Display the possible answers with commas and 'or' at the end.
        print "Is the answer: %s or %s?" % (", ".join(question[2:-1]), question[-1])
        user_answer = raw_input()

        # Did the user select a valid choice?
        if user_answer in question[2:]:
            break

    # Stop asking questions?
    if len(user_answer) == 0:
        print "Good bye"
        break

    if user_answer == question[1]:
        print "Correct"
    else:
        print "Incorrect"

    print

此脚本会将您的所有问题和答案读入名为quiz的单个列表中。测验中的第一个条目如下:

['What is 1+1', '2', '2', '4', '6', '9']

第一部分是问题,第二部分是正确答案,其余条目是您想要提供的尽可能多的答案。如果用户只按Enter键,测验将完成。

希望这有帮助。

使用Python 2.7进行测试