-1

プロジェクトオイラーの問題164を開始したばかりで、20桁の数字で連続する3桁の各セットの合計のリストを出力する関数が必要です。これが私の機能です。

    def func(n):
    sumlist = []
    m = str(n)
    for i in range(0,18):
         sumlist.append(sum(int(m[i])+int(m[i+1])+int(m[i+2])))
    return sumlist

非シーケンスエラーの繰り返しが発生し続けていますが、なぜそうすべきなのかわかりません。どんな助けでも感謝します、ありがとう。

編集

完全なトレースバックは次のとおりです。

Traceback (most recent call last): 
  File "peproblem164.py", line 8, in ? print func(11201201201201201201) 
  File "peproblem164.py", line 5, in func    
    sumlist.append(sum(int(m[i])+int(m[i+1])+int(m[i+2]))) 
TypeError: iteration over non-sequence'
4

2 に答える 2

3

その理由は

int(m[i]) + int(m[i+1]) + int(m[i+2])

シーケンスではありません。それはintです。私はあなたが意味すると信じています:

sumlist.append(sum((int(m[i]), int(m[i+1]), int(m[i+2]))

これはうまくいくので

(int(m[i]), int(m[i+1]), int(m[i+2]))

シーケンスです

全体として、文字列ではなく整数のリストを操作する方が簡単なので、最初に sに変換mするのが理にかなっています。int

m = map(int, str(n))

次に、Python のスライス構文を使用してサブシーケンスの合計を取得します。

for i in range(18): #Leaving out the start argument is equivalent to range(0, 18)
    sumlist.append(sum(m[i:i+3]))

代わりにリスト内包表記を使用すると、さらに Pythonic になります( fasterは言うまでもありません)。

sumlist = [m[i:i+3] for i in range(18)] #same thing as the for loop
于 2012-11-27T11:36:47.927 に答える
0

サムコールは本当に必要ありません。交換

sumlist.append(sum(int(m[i])+int(m[i+1])+int(m[i+2])))

sumlist.append(int(m[i])+int(m[i+1])+int(m[i+2]))
于 2012-11-27T11:39:26.620 に答える