Python我如何将A,B,C,D的问题随机化

2024-05-18 11:05:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是拥有它,这样它就可以随机化问题。在

例如,测试开始,第一个问题可能是问题8。单词Question只是一个注释。在

我希望它看起来像这样:

What does OSI stand for?

A- Open Systematic Information
B- Open Systems Interconnect
C- Organised Stairway Interweb
D- Open Safe Internet

代码如下:

^{pr2}$

Tags: 目标forinformationosiopen单词whatquestion
3条回答

您可以将所有问题保存在字典列表中:

questions = [{'question': 'What does OSI stand for?',
              'correct': ['Open Systems Interconnect'],
              'incorrect': ['Open Systematic Information', 
                            'Organised Stairway Interweb',
                            'Open Safe Internet']},
             {'question': "What is the fourth Layer of the OSI Model?",
              'correct': ['Transport Layer'],
              'incorrect': ['Teleport Layer', 
                            'Telecommunications Layer', 
                            'Topology Layer']}, 
             ...]

现在你可以给用户一个给定数量的随机选择的问题,每次:

^{pr2}$

然后问一个问题:

for q_num, question in enumerate(to_answer, 1):
    print("Question {0}: {1}".format(q_num, question['question']))

并以随机顺序呈现答案,将每个答案存储在answer_key中对应的键(abc等):

    answers = question['incorrect'] + question['correct']
    random.shuffle(answers)
    answer_key = {}
    for answer, key in zip(answers, string.ascii_lowercase):
        print("{0}: {1}".format(key, answer))
        answer_key[key] = answer

接受用户的输入:

    while True:
        user_answer = input().lower()
        if user_answer not in answer_key:
            print("Not a valid answer")
        else:
            break

最后检查他们是否正确并报告:

    correct = question['correct']
    if answer_key[user_answer] in correct:
        print("Correct!")
    else:
        s = "Incorrect; the correct answer{0}:"
        print(s.format(" was" if len(correct) == 1 else "s were"))
        for answer in correct:
            print(answer)

这支持一个问题有多个正确答案的可能性,并且尽可能少地硬编码,这样整个事情都由questions配置。这样可以减少代码的重复,并使以后更容易发现错误。在

示例输出(对于number_of_questions = 1questions,如上所示):

Question 1: What does OSI stand for?
a: Open Systematic Information
b: Open Safe Internet
c: Organised Stairway Interweb
d: Open Systems Interconnect
e
Not a valid answer
b
Incorrect; the correct answer was:
Open Systems Interconnect

你可以简单地从文件中提取信息

while count < 10:
wordnum = random.randint(0, len(questionsfile)-1)
print 'What is:  ', answersfile[wordnum], ''
options = [random.randint(0, len(F2c)-1),
    random.randint(0, len(answersfile)-1),random.randint(0, len(answersfile)-1)]
options[random.randint(0, 2)] = wordnum
print '1 -', answersfile[options[0]],
print '2 -', answersfile[options[1]],
print '3 -', answersfile[options[2]],
print '4 -', answersfile[options[3]]
answer = input('\nYou  choose number ?: ')
if options[answer-1] == wordnum:

您可以将答案放入列表中,并在列表上调用^{}

import random

answers = [
    "Open Systematic Information",
    "Open Systems Interconnect",
    "Organised Stairway Interweb",
    "Open Safe Internet",
]
random.shuffle(answers)

for letter, answer in zip("ABCD", answers):
    print("{}- {}".format(letter, answer))

每次运行时,它可能会产生不同的输出,例如:

^{pr2}$

相关问题 更多 >