有没有办法在Python词典中附加第3个值?

Arn*_*904 4 python dictionary

这可能是一个愚蠢的问题,我相信我很有可能采取完全错误的方法来解决我的问题,所以如果有人知道更好的方法,请随时纠正我/指出我正确的方向.

我正在尝试用Python制作一个基本的测验程序以获得乐趣,我似乎无法找到一个好方法来实际上用他们的答案调用问题并存储正确答案应该是什么.理想情况下,我也希望在问题中改变答案,例如#1的答案也不总是"A",但目前这个步骤太过分了.

无论如何,我认为字典可以工作.我会做这样的事情:

test = {
    '1':    "What is 1+1?\nA) 2\nB) 11\nC) 1\nD) None of the above.\n\n", #A
    '2':    "What is 2+2?\nA) 2\nB) 4\nC) 1\nD) None of the above.\n\n", #B
    '3':    "What is 3+3?\nA) 2\nB) 11\nC) 6\nD) None of the above.\n\n", #C
    '4':    "What is 4+4?\nA) 2\nB) 11\nC) 1\nD) None of the above.\n\n", #D
    '5':    "What is 5+5?\nA) 2\nB) 11\nC) 10\nD) None of the above.\n\n", #C
    '6':    "What is 6+6?\nA) 2\nB) 12\nC) 1\nD) None of the above.\n\n", #B
    }

answer = raw_input(test['1'])
Run Code Online (Sandbox Code Playgroud)

我可以使用它来按顺序或随机稍微修改轻松打印出问题.但是,我无法将正确的答案附加到词典中,这意味着我必须做一些像制作荒谬的if陈述一样的事情.有谁知道解决方案?有没有办法为每个字典条目添加第3个值?一个解决方案,我完全忽略了?任何帮助将不胜感激.

iCo*_*dez 5

将字典的值设为元组:

'1': ("What is 1+1?\nA) 2\nB) 11\nC) 1\nD) None of the above.\n\n", 'A')
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过问题test['1'][0]和答案访问问题test['1'][1].

  • 没有.套装是无序的; 元组只是不可变的. (3认同)

Ada*_*ith 5

看起来你的数据结构错误.您应该使用字典列表,而不是您的其他答案所建议的元组或列表字典.

questions = [
    {'question':"What is 1+1?\nA) 2\nB) 11\nC) 1\nD) None of the above.\n\n",
     'answer':"#A"},
    {'question':"What is 2+2?\nA) 2\nB) 4\nC) 1\nD) None of the above.\n\n",
     'answer':"#B"},
    ...}
Run Code Online (Sandbox Code Playgroud)

这将让您通过以下方式迭代您的问题:

for q in questions:
    print(q['question'])
    ans = input(">> ")
    if ans == q['answer']:
        # correct!
    else:
        # wrong!
Run Code Online (Sandbox Code Playgroud)

如果你仍然需要数字,你可以保存number为字典的另一个键(使这种类似于数据库中的行,number作为主键):

{'number': 1,
 'question': ...,
 'answer': ...}
Run Code Online (Sandbox Code Playgroud)

或者只是通过你的问题,使用迭代enumeratestart关键字参数

for q_num, q in enumerate(questions, start=1):
    print("{}. {}".format(q_num, q['question']))
    ...
Run Code Online (Sandbox Code Playgroud)