3

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())

何か案は?

4

1 に答える 1

7

ここに挿入0i = 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    

0sumsdivs[1]も同様で、以下をsumsdivs[sumsdivs[0]]スローしKeyErrorます。

>>> sumsdivs[sumsdivs[1]]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 0
于 2014-05-31T08:00:25.413 に答える