为什么键错误:0

2024-10-05 13:13:32 发布

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

我正试图解决Euler21项目,但我得到了KeyError:0,这通常发生在您引用不存在的字典键时。不过,我想我已经用10000条件解决了这个问题。该错误引用main()函数中的第一个“if”语句。

sumsdivs = {}
for i in range(1, 10000):
    tmpls = []
    for j in range(1, i):
        if i % j == 0:
            tmpls.append(j)
    sumsdivs[i] = sum(tmpls)

amls = []
def main():
    for i in range(1, 10000):
        if sumsdivs[i] < 10000 and sumsdivs[i] == sumsdivs[sumsdivs[i]]:
            if sumsdivs[i] not in amls:
                amls.append(sumsdivs[i])
            if sumsdivs[sumsdivs[i]] not in amls:
                amls.append(sumsdivs[sumsdivs[i]])
    return sum(amls)

print(main())

有什么想法吗?


Tags: 项目inforifmainnotrangesum
1条回答
网友
1楼 · 发布于 2024-10-05 13:13:32

在此处插入0作为i = 1

sumsdivs = {}
for i in range(1, 10000):
    tmpls = []
    for j in range(1, i):
        if i % j == 0:
            tmpls.append(j)
    sumsdivs[i] = sum(tmpls)

内部循环从不运行(range(1, 1)为空),并且sum([])为0。

演示:

>>> sumsdivs = {}
>>> for i in range(1, 2):
...     tmpls = []
...     for j in range(1, i):
...         if i % j == 0:
...             tmpls.append(j)
...     sumsdivs[i] = sum(tmpls)
... 
>>> sumsdivs
{1: 0}
>>> sum([])
0    

所以sumsdivs[1]是0,并且sumsdivs[sumsdivs[0]]抛出一个KeyError

>>> sumsdivs[sumsdivs[1]]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 0

相关问题 更多 >

    热门问题