首页 > 解决方案 > 为什么有时在 python 中会出现此错误?

问题描述

我是编程世界的新手,我开始学习 python。

我想制作简单的测验应用程序,但我一开始就卡住了。我想不出一种打印随机问题并检查答案是否正确的方法。

我写了这段代码,有时它可以工作,但有时我会出错。有人可以向我解释这个错误是什么,我该怎么办?

import random

def topic_ch():
    print ("hello you have 3 topics chose your topic by preesing the topic number \n 1-random asking \n 2- quizz")
    topc = input()
    if topc == "1":
        topic_1()


def topic_1():
    set1 = {1: "who is the presedint of USA ? :\n -1 D.Trump         2-Emmanuel Macron\n -3 George W. Bush       4-Bill Clinton:",
       2:"who is the presedint of France ? :\n -1 D.Trump           2-Emmanuel Macron\n -3  George W. Bush       4-Bill Clinton:"}
    print (random.choice(set1))
    ans = input()
    for set1[1] in set1:
        if ans == "1":
            print ("correct")
            break
        else:
            print ("opss")
            break
        for set1[2] in set1:
            if ans == "3":
                print ("correct")
                break


topic_ch()

错误:

python Traceback(最近一次调用最后一次):文件“C:\Users\Raad\Desktop\oi.py”,第 28 行,在 topic_ch() 文件“C:\Users\Raad\Desktop\oi.py”,第 7 行,在 topic_ch topic_1() 文件“C:\Users\Raad\Desktop\oi.py”中,第 13 行,在 topic_1 中打印 (random.choice(set1)) 文件“C:\Users\Raad\AppData\Local\Programs \Python\Python37-32\lib\random.py",第 262 行,选择返回 seq[i] KeyError: 0

标签: pythonpython-3.x

解决方案


random.choice需要一个序列 - 一个容器,您可以在其中通过从 0 到小于容器长度的数字索引获取项目(列表和元组就是这样的例子)。当你传入字典时,它会随机选择元素 0 或元素 1(因为字典的长度为 2)。1 恰好对应于您的字典的一个键,所以有时看起来这是有效的。如果您的字典键只是比字典长度小 0 到 1 的数字,这可能会起作用,但一般来说,从字典中选择随机项的更好方法是

key = random.choice(list(set1.keys())

请注意,这set1不是这个变量的好名字,因为 1)它不是一个集合,它是一个字典,并且 2)它没有告诉我们关于变量中存储了哪些值的任何信息。您的代码也可能有其他问题 - 如果您在合并此修复程序后仍然无法使其正常工作,请随时提出另一个问题。


推荐阅读