python - 为什么有时在 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
解决方案
random.choice
需要一个序列 - 一个容器,您可以在其中通过从 0 到小于容器长度的数字索引获取项目(列表和元组就是这样的例子)。当你传入字典时,它会随机选择元素 0 或元素 1(因为字典的长度为 2)。1 恰好对应于您的字典的一个键,所以有时看起来这是有效的。如果您的字典键只是比字典长度小 0 到 1 的数字,这可能会起作用,但一般来说,从字典中选择随机项的更好方法是
key = random.choice(list(set1.keys())
请注意,这set1
不是这个变量的好名字,因为 1)它不是一个集合,它是一个字典,并且 2)它没有告诉我们关于变量中存储了哪些值的任何信息。您的代码也可能有其他问题 - 如果您在合并此修复程序后仍然无法使其正常工作,请随时提出另一个问题。
推荐阅读
- variables - 如何在两次对话之间建立联系(2项技能)
- spring-boot - 春季启动普罗米修斯千分尺 - 仪表不更新
- windows - 在 Windows 10 上使用带有 VSCode 的选美
- mysql - 我无法在 phpmyadmin 中正确创建表
- python - python-进程中的无限循环导致kivy实例产生forverer
- frequency - 如何使用 USRP 测量天线谐振频率?
- apache-spark - SparkSessionExtensions - 检查来自表的字段
- java - 如何使用 aapt 命令行工具更改 Targeted-sdk-version 和应用程序?(如果可能)
- r - 在 ieugwasr 中使用 ld_clump 函数得到不合理的结果
- go - 如果关键测试失败,如何中止测试