【发布时间】:2014-05-31 07:54:34
【问题描述】:
我正在尝试解决 Project Euler 21 但我得到 KeyError: 0 当您引用不存在的字典键时通常会发生这种情况。但是,我认为我已经用
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())
有什么想法吗?
【问题讨论】:
-
如果
sumdivs[i]为0,sumsdivs[sumsdivs[i]]可能会抛出异常。 -
@MartijnPieters 这不可能。要在
sumsdivs中有一个0,tmpls必须是一个空列表,但它始终包含1,因为每个range(1, n)列表都包含1和n % 1 == 0 -
@Haidro:
sumsdivs[1]是0。 -
好点,现在正在检查...
-
@MartijnPieters 啊,我明白了。
range(1, 1)是[],而不是[1]
标签: python python-3.x keyerror