2013-02-11 12 views
8

Dlaczego pojawia się ten błąd?TypeError: Obiekt 'int' nie obsługuje przypisania elementu

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

Kod:

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 - zaskakująco, '++ k' jest poprawną składnią pythona - która jest skrótem od" nic nie rób do k "i zwróć ją za * najwięcej * obiektów' k' :-). 'k ++' bez niczego po prawej stronie jest pewny sposób na awarię i nagrywanie :). – mgilson

Odpowiedz

14

Ty przechodząc liczbę całkowitą do swojej funkcji jako a. Następnie spróbować przypisać do niej, jak: a[k] = ... ale to nie działa, ponieważ a jest skalarne ...

To samo jakbyś próbowała:

50[42] = 7 

To stwierdzenie nie ma sens, a pyton krzyczy na ciebie w ten sam sposób (prawdopodobnie).

Ponadto, ++k nie robi tego, co myślisz - jest przetwarzany jako (+(+(k))) - tj. Kod bajtowy jest tylko UNARY_POSITIVE dwa razy. To, co rzeczywiście chcą coś jak k += 1

Wreszcie, należy zachować ostrożność ze stwierdzeniami takimi jak:

q = q/b 

Nawias korzystania z nadrukiem zakładają, że chcesz to wykorzystać na python3.x w pewnym momencie. ale, x/y zachowuje się inaczej na python3.x niż na python2.x. Patrząc na algorytm, domyślam się, że chcesz z podziałem całkowitym (ponieważ sprawdzisz q != 0, który byłby trudny do spełnienia dzięki float). W takim przypadku należy rozważyć użycie:

q = q // b 

, który wykonuje podział liczb całkowitych na python2.x i python3.x.

+3

Warto wyraźnie stwierdzić, że ++ i - nie istnieją w Pythonie. – BlackVegetable

+1

@BlackVegetable - Początkowo myślałem, że '++ k' będzie" SyntaxError ", ale tak nie jest. (Musiałem spojrzeć na kod bajtowy, aby dowiedzieć się, co robi ... 'k ++' byłby jednak 'SyntaxError' chociaż). – mgilson

+0

@mgilson cóż, jest to mniej lub bardziej oczywisty sposób analizowania '++ k' w języku, który ma jednoargumentowy' + ', ale nie' ++ ':) – wRAR

Powiązane problemy