2009-12-21 15 views
12
inp = int(input("Enter a number:")) 

for i in inp: 
    n = n + i; 
    print (n) 

... genera un error: 'int' object is not iterable¿el objeto int no es iterable?

quería averiguar el total sumando cada dígito, por ejemplo, 110. 1 + 1 + 0 = 2. ¿Cómo se hace eso?

Gracias

+0

Si usted está poniendo los dígitos juntos, entonces sería 110 . No estoy seguro de dónde salió el 11. –

+2

@Trent: http://en.wikipedia.org/wiki/Unary_numeral_system – configurator

+0

http://stackoverflow.com/questions/14939953/sum-the-digits-of-a-number-python – user345352353

Respuesta

17

En primer lugar, pierda esa llamada absurda a int - que le está llevando más lejos de lo que quiere, así que, ¿qué le poseyó para ponerlo? Cambio:

inp = int(input("Enter a number:")) 

a la más simple

inp = input("Enter a number:") 

modo que inp es una cadena de dígitos y que de hecho puede bucle sobre ella, dígito a dígito.

A continuación, asigne un valor inicial a n -, como su código es el correcto, obtendrá un NameError ya que nunca lo inicializa. Es de suponer que desea n = 0 antes del bucle for.

A continuación, tenga en cuenta la diferencia entre un carácter y un número entero de nuevo. Ahora tiene:

n = n + i; 

que, además del punto y coma completamente absurda (pero inocua), está tratando de resumir el carácter i al número entero n - que no funciona!Por lo tanto, se convierte en este

n = n + int(i) 

a su vez el carácter '7' en número entero 7, y así sucesivamente.

6

intento:

for i in str(inp): 

Eso se iterar sobre los personajes de la representación de cadena. Una vez que tenga cada personaje, puede usarlo como un número separado.

+0

Hmm .. dice TypeError : tipo (s) de operandos no soportados para +: 'int' y 'str' – 3zzy

+1

¿volver a convertir a un int al agregar? –

+1

Bueno, cuando vas a agregarlo a un número entero, ahora es una cadena. Entonces, en ese caso, podrías decir int (i) + n o lo que sea. –

1

for .. in declaraciones esperan que utilice un tipo que tiene un iterador definido. Un tipo int simple no tiene un iterador.

3

Bueno, quiere procesar la cadena que representa el número, iterando sobre los dígitos, no el número en sí (que es una entidad abstracta que podría escribirse de manera diferente, como "CX" en números romanos o "0x6e" hexadecimal (ambos para 110) o lo que sea).

Por lo tanto:

inp = input('Enter a number:') 

n = 0 
for digit in inp: 
    n = n + int(digit) 
    print(n) 

cuenta que se requiere la n = 0 (en algún lugar antes de la entrada en el bucle). No puede tomar el valor de una variable que no existe (y el lado derecho de n = n + int(digit) toma el valor de n). Y si n existe en ese punto, podría contener algo completamente ajeno a sus necesidades actuales, lo que llevaría a un comportamiento inesperado; tienes que protegerte de eso.

Esta solución no intenta garantizar que la entrada proporcionada por el usuario sea realmente un número. Dejaré este problema para que lo piense (sugerencia: todo lo que necesita está allí en the Python tutorial).

3
nota

lateral: si desea obtener la suma de todos los dígitos, sólo tiene que hacer

print sum(int(digit) for digit in raw_input('Enter a number:')) 
1

Como ghills ya se habían mencionado

inp = int(input("Enter a number:")) 

n = 0 
for i in str(inp): 
    n = n + int(i); 
    print n 

Cuando se recorre algo, la palabra clave es "IN", solo piense en ello como una lista de algo. No puedes recorrer un entero simple. Por lo tanto, no es iterable.

0

Tome su entrada y asegúrese de que sea una cadena para que sea iterable.

Luego realice una lista de comprensión y cambie cada valor a un número.

Ahora, se puede hacer la suma de todos los números si quieres:

inp = [int(i) for i in str(input("Enter a number:"))] 
print sum(inp) 

O, si usted realmente quiere ver la salida mientras se está ejecutando:

def printadd(x,y): 
    print x+y 
    return x+y 

inp = [int(i) for i in str(input("Enter a number:"))] 
reduce(printadd,inp) 
0

Usted puede tratar para cambiar for i in inp: en for i in range(1,inp): Iteración no funciona con una sola int. En cambio, debe proporcionar un rango para que se ejecute.

0

No lo convierta en un int(), pero que sea un range() resolverá este problema.

inp = range(input("Enter a number: ")) 
2

Tal vez usted está tratando de

for i in range(inp) 

acabo de tener este error porque no estaba usando gama()

Cuestiones relacionadas