为什么在python中有时会出现这种错误?

2024-04-25 00:29:30 发布

您现在位置: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 (most recent call last): File "C:\Users\Raad\Desktop\oi.py", line 28, in topic_ch() File "C:\Users\Raad\Desktop\oi.py", line 7, in topic_ch topic_1() File "C:\Users\Raad\Desktop\oi.py", line 13, in topic_1 print (random.choice(set1)) File "C:\Users\Raad\AppData\Local\Programs\Python\Python37-32\lib\random.py", line 262, in choice return seq[i] KeyError: 0


Tags: theinpytopiciflinerandomch
2条回答

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

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

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

random.choice()需要序列(例如列表)作为输入,而不是字典。你知道吗

而不是:

print (random.choice(set1))

尝试:

choice = random.choice(list(set1))
print(set1[choice])

相关问题 更多 >