2013-02-11 22 views
8

このエラーはなぜ発生しますか?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)) 
+1

@JBernardo - 驚くべきことに、 '++ k'は有効なpython構文です。これは" do nothing to k "の略で、ほとんどの*オブジェクト' k'のためにそれを返します:-)。右に何もない 'k ++ 'はクラッシュして焼ける確かな方法です:)。 – mgilson

答えて

14

あなたはaとしてあなたの関数に整数を渡しています。あなたがしようとしたかのようにそれは同じことだ

... a[k] = ...しかしaがスカラーであるので、それは動作しません:

50[42] = 7 

文がないことをあなたはその後、としてそれに割り当てよう非常に意味をなさないとpythonはあなたに同じように(おそらく)叫ぶだろう。

また、++kは、あなたが考える通りではありません。それは(+(+(k)))と解釈されます。つまり、bytcodeはちょうどUNARY_POSITIVEです。あなたは、印刷で使用カッコあなたはいくつかの点でpython3.xにこれを使用することを意味するものではあり

q = q/b 

:あなたが実際に欲しいのはk += 1

のようなものは最後に、のような文で注意が必要です。しかし、x/yは、python2.xよりもpython3.xの動作が異なります。アルゴリズムを見ると、整数部(浮動小数点数を満たすことが難しいq != 0をチェックしているので)を推測しています。その場合は、次のように使用することを検討してください。

q = q // b 

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

+3

++と - はPythonには存在しないことを明示的に述べる価値があります。 – BlackVegetable

+1

@BlackVegetable - 私は '++ k'が' SyntaxError'と考えていましたが、そうではありません。 (私はバイトコードを見て、それが何をしているのか把握しなければならなかった... 'k ++ 'は' SyntaxError'だが)。 – mgilson

+0

@mgilsonまあ、単項 '+'を持つ言語で '++ k'を解析する方法は多かれ少なかれわかります:) – wRAR

関連する問題