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

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

... getta un errore: 'int' object is not iterableL'oggetto int non è iterable?

volevo scoprire il totale per l'aggiunta di ogni cifra, per esempio, 110. 1 + 1 + 0 = 2. Come posso fare?

Grazie

+0

Se avete deciso di mettere insieme le cifre allora sarebbe 110 Non sono sicuro da dove venisse. –

+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

risposta

17

In primo luogo, perdere quella chiamata assurdo int -, che si sta prendendo più da ciò che si vuole, così, che cosa mai posseduto a mettere in ?! Cambia:

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

alla semplice

inp = input("Enter a number:") 

in modo che inp è una stringa di cifre e si può anzi ciclo su di esso, cifra per cifra.

Successivamente, assegnare un valore iniziale a n - mentre il codice si trova in questo momento, si otterrà un NameError poiché non lo si inizializza mai. Presumibilmente si desidera n = 0 prima del ciclo for.

Quindi, considerare nuovamente la differenza tra un carattere e un intero. Ora avete:

n = n + i; 

che, oltre al tutto assurdo (ma innocui) e virgola, sta cercando di sommare il carattere I del intero n - che non funziona!Quindi, questo diventa

n = n + int(i) 

per trasformare carattere '7' in integer 7, e così via.

6

prova:

for i in str(inp): 

Che vi scorrere i caratteri della rappresentazione di stringa. Una volta che hai ogni personaggio puoi usarlo come un numero separato.

+0

Hmm..it dice TypeError : Tipo/i di operando non supportati per +: 'int' e 'str' – 3zzy

+1

convertiti di nuovo in int quando si aggiungono? –

+1

Bene quando si va ad aggiungerlo a un numero intero, ora è una stringa. Quindi in tal caso potresti dire int (i) + n o qualunque cosa sia. –

1

for .. in le istruzioni si aspettano di utilizzare un tipo con un iteratore definito. Un semplice tipo int non ha un iteratore.

3

Bene, si desidera elaborare la stringa che rappresenta il numero, ripetendo le cifre, non il numero stesso (che è un'entità astratta che potrebbe essere scritta in modo diverso, come "CX" in numeri romani o "0x6e" esadecimale (sia per 110) o qualsiasi altra cosa).

Pertanto:

inp = input('Enter a number:') 

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

Si noti che il n = 0 è richiesto (da qualche parte prima di entrare nel loop). Non puoi prendere il valore di una variabile che non esiste (e il lato destro di n = n + int(digit) assume il valore di n). E se n esiste a quel punto, potrebbe contenere qualcosa di completamente estraneo ai tuoi bisogni attuali, portando a comportamenti imprevisti; devi proteggerti.

Questa soluzione non fa alcun tentativo per garantire che l'input fornito dall'utente sia effettivamente un numero. Lascerò questo problema a cui pensare (suggerimento: tutto ciò di cui hai bisogno è lì nel the Python tutorial).

3
nota

laterale: se si vuole ottenere la somma di tutte le cifre, si può semplicemente fare

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

Come ghills avevano già accennato

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

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

Quando si loop attraverso qualcosa, parola chiave è "IN", pensalo sempre come una lista di qualcosa. Non è possibile scorrere un intero semplice. Pertanto, non è iterable.

0

Prendi il tuo input e assicurati che sia una stringa in modo che sia iterabile.

Quindi eseguire una comprensione di lista e modificare ogni valore su un numero.

Ora, si può fare la somma di tutti i numeri, se si desidera:

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

Oppure, se si vuole veramente vedere l'uscita mentre è in esecuzione:

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

Si può provare per cambiare for i in inp: in for i in range(1,inp): Iterazione non funziona con un singolo int. Invece, è necessario fornire un intervallo per l'esecuzione.

0

Non farlo un int(), ma renderlo un range() risolverà questo problema.

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

forse si sta cercando di

for i in range(inp) 

Ho appena avuto questo errore perché non stavo usando range()

Problemi correlati