このエラーが発生するのはなぜですか?
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))
整数を関数に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の両方で整数除算を実行します。