我正在尝试解决Project Euler 21但我得到的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())
有什么想法吗?
答案 0 :(得分:4)
您在此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