59 votes

TypeError : l'objet 'int' n'est pas inscriptible

J'essaie de créer un programme simple qui vous indique votre numéro porte-bonheur selon la numérologie. Je continue à avoir cette erreur :

 File "number.py", line 12, in <module>
    sumln = (int(sumall[0])+int(sumall[1]))
TypeError: 'int' object is not subscriptable

Mon script est :

 birthday = raw_input("When is your birthday(mm/dd/yyyy)? ")
summ = (int(birthday[0])+int(birthday[1]))
sumd = (int(birthday[3])+int(birthday[4]))
sumy= (int(birthday[6])+int(birthday[7])+int(birthday[8])+int(birthday[9]))
sumall = summ + sumd + sumy
print "The sum of your numbers is", sumall
sumln = (int(sumall[0])+int(sumall[1]))
print "Your lucky number is", sumln`   

30voto

Free Monica Cellio Points 2070

L'erreur est exactement ce qu'elle dit ; vous essayez de prendre sumall[0] quand sumall est un entier et cela n'a aucun sens. À votre avis, que devrait être sumall

12voto

Rik Poggi Points 10195

Si vous voulez additionner le chiffre d'un nombre, une façon de le faire est d'utiliser sum() + une expression génératrice :

 sum(int(i) for i in str(155))

J'ai modifié un peu votre code en utilisant sum() , vous voudrez peut-être y jeter un œil :

 birthday = raw_input("When is your birthday(mm/dd/yyyy)? ")
summ = sum(int(i) for i in birthday[0:2])
sumd = sum(int(i) for i in birthday[3:5])
sumy = sum(int(i) for i in birthday[6:10])
sumall = summ + sumd + sumy
print "The sum of your numbers is", sumall
sumln = sum(int(c) for c in str(sumall)))
print "Your lucky number is", sumln

8voto

Juste pour être clair, toutes les réponses jusqu'à présent sont correctes, mais le raisonnement qui les sous-tend n'est pas très bien expliqué.

La sumall n'est pas encore une chaîne. Les parenthèses ne seront pas converties en chaîne (par exemple, summ = (int(birthday[0])+int(birthday[1])) renvoie toujours un entier. Il semble que vous ayez probablement eu l'intention de taper str((int(sumall[0])+int(sumall[1]))) , mais que vous l'avez oublié. La raison pour laquelle le str() corrige tout car elle convertit tout ce qui est compatible en chaîne.

3voto

kindall Points 60645
sumall = summ + sumd + sumy

Votre sumall est un entier. Si vous en voulez les caractères individuels, convertissez-les d'abord en chaîne.

1voto

DonCallisto Points 9157

Vous ne pouvez pas faire quelque chose comme ça : (int(sumall[0])+int(sumall[1]))

C'est parce que sumall est un int et non une liste ou un dict.

Donc, summ + sumd sera votre numéro porte-bonheur

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X