2012-01-29 14 views
11

Estoy tratando de crear un programa simple que te diga tu número de la suerte según la numerología. Sigo recibiendo este error:TypeError: el objeto 'int' no es subscriptible

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

Mi guión es:

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` 
+0

El valor almacenado en 'sumall' es un número entero (el resultado de la suma de 3 otros enteros). Sin embargo, un par de líneas hacia abajo, intentas subindicar ese entero, por lo tanto, el error. (!) –

+3

Quizás también quieras usar 'birthday.split ('/')' para separar día, mes y año. –

Respuesta

2

Si desea sumar el dígito de un número, una forma de hacerlo es usando sum() + una expresión generadora:

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

que modificó un poco su código usando sum(), tal vez usted quiere tomar una mire:

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 
6

El error es exactamente lo que dice que es; estás tratando de tomar sumall [0] cuando sumall es un int y eso no tiene ningún sentido. ¿Qué crees que debería ser el sumall?

0

No se puede hacer algo así: (int(sumall[0])+int(sumall[1]))

Eso es porque es un sumallint y no una lista o dict.

Así, summ + sumd habrá que estés número de la suerte

3
sumall = summ + sumd + sumy 

Su sumall es un entero. Si desea los caracteres individuales de él, primero conviértalo en una cadena.

1

Tal vez puedas probar:

sumall = summ + sumd + sumy 
print "The sum of your numbers is", sumall 
sumall = str(sumall) # add this line 
sumln = (int(sumall[0])+int(sumall[1])) 
print "Your lucky number is", sumln 

sumall es un número, y no se puede acceder a sus dígitos usando la notación de subíndice (sumall[0], sumall[1]). Para que eso funcione, tendrás que volver a transformarlo en una cadena.

0

para que quede claro, todas las respuestas hasta el momento son correctos, pero el razonamiento detrás de ellos no se explica muy bien.

La variable sumall aún no es una cadena. Parentheticals no se convertirá a una cadena (por ejemplo, summ = (int(birthday[0])+int(birthday[1])) devuelve un número entero. Parece que lo más probable es que haya intentado escribir str((int(sumall[0])+int(sumall[1]))), pero se olvidó de hacerlo. La razón por la cual la función str() corrige todo es porque convierte cualquier cosa en ella compatible con una cadena

Cuestiones relacionadas