web-dev-qa-db-ja.com

TypeError: 'int'オブジェクトはアイテムの割り当てをサポートしていません

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

    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))
12
Ris

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

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

50[42] = 7

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

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

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

q = q / b

Printで使用する括弧は、ある時点でpython3.xでこれを使用することを意味します。ただし、x/yの動作はpython3.xとpython2.xで異なります。アルゴリズムを見て、あなたが望んでいると思います整数除算(フロートでは満足できないq != 0をチェックするため)。その場合は、次の使用を検討してください。

q = q // b

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

21
mgilson