17

なぜこのエラーが発生するのですか?

    a[k] = q % b
 TypeError: 'int' object does not support item assignment

コード:

def algorithmone(n,b,a):
     assert(b > 1)
     q = n
     k = 0
     while q != 0:
        a[k] = q % b
        q = q / b
        ++k

     return k

print (algorithmone(5,233,676))
print (algorithmone(11,233,676))
print (algorithmone(3,1001,94))
print (algorithmone(111,1201,121))
4

1 に答える 1

25

として関数に整数を渡していますa。次に、次のように代入しようとします が、スカラーであるa[k] = ...ため機能しません...a

それはあなたが試したのと同じことです:

50[42] = 7

そのステートメントはあまり意味がなく、python は同じように怒鳴るでしょう (おそらく)。

また、++kあなたが思っていることをしていません-それはとして解析されます(+(+(k)))-つまり、バイトコードはちょうどUNARY_POSITIVE2倍です。あなたが実際に欲しいのは次のようなものですk += 1

最後に、次のようなステートメントには注意してください。

q = q / b

print で使用する括弧は、ある時点でこれを python3.x で使用することを意味します。ただし、x/ypython3.x では python2.x とは異なる動作をします。アルゴリズムを見ると、整数除算q != 0が必要だと思います(浮動小数点数で満たすのが難しいかどうかを確認するため)。その場合は、次の使用を検討する必要があります。

q = q // b

python2.x と python3.x の両方で整数除算を実行します。

于 2013-02-11T03:07:14.110 に答える