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

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

... wirft einen Fehler: 'int' object is not iterableInt-Objekt ist nicht iterierbar?

ich durch das Hinzufügen jeder Ziffer, für zB die Gesamt, um herauszufinden, wollte 110 1 + 1 + 0 = 2. Wie kann ich das tun?

Dank

+0

wurde unter Verwendung Wenn Sie die Ziffern setzen sind zusammen, dann wäre es 110 sein Ich bin mir nicht sicher, wo die 11 herkommt. –

+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

Antwort

17

Erstens verlieren, dass absurd Aufruf int - die Sie weiter aus nimmt, was Sie wollen, so, was Sie jemals besessen es in setzen ?! Wechsel:

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

der einfacheren

inp = input("Enter a number:") 

so dass inp eine Ziffernfolge ist, und Sie können in der Tat eine Schleife über sie, Ziffer für Ziffer.

Ordnen Sie als nächstes einen Anfangswert zu n - wie Sie Code steht jetzt, erhalten Sie eine NameError, da Sie es nie initialisieren. Vermutlich wollen Sie n = 0 vor der for Schleife.

Betrachten Sie als nächstes den Unterschied zwischen einem Zeichen und einer Ganzzahl. Sie haben jetzt:

n = n + i; 

, die neben dem völlig absurd (aber harmlos) Semikolon, versuchen, den Charakter i zum integer n zu summieren - die nicht funktionieren!So Diese wird

n = n + int(i) 

Charakter drehen '7' in ganzzahlige 7, und so weiter.

6

Versuch:

for i in str(inp): 

, die über die Zeichen in der Zeichenfolge Darstellung laufen wird. Sobald Sie jedes Zeichen haben, können Sie es wie eine separate Nummer verwenden.

+0

Hmm..it sagt TypeError : nicht unterstützte Operandentypen für +: 'int' und 'str' – 3zzy

+1

zurückkonvertieren in ein int beim Hinzufügen? –

+1

Nun, wenn Sie es zu einer Ganzzahl hinzufügen, ist es jetzt eine Zeichenfolge. In diesem Fall könnte man also int (i) + n oder was auch immer sagen. –

1

for .. in Anweisungen erwarten, dass Sie einen Typ verwenden, für den ein Iterator definiert ist. Ein einfacher Int-Typ hat keinen Iterator.

3

Nun, Sie möchten den String, der die Zahl darstellt, über die Ziffern, nicht die Zahl selbst (eine abstrakte Entität, die anders geschrieben werden könnte, wie "CX" in römischen Zahlen oder "0x6e" hexadezimal (sowohl für 110) oder was auch immer).

Deshalb:

inp = input('Enter a number:') 

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

beachten, dass die n = 0 erforderlich ist (irgendwo vor dem Eintritt in die Schleife). Sie können den Wert einer Variablen, die nicht existiert, nicht übernehmen (und die rechte Seite von n = n + int(digit) nimmt den Wert n an). Und wenn n an diesem Punkt existiert, kann es etwas enthalten, das völlig unabhängig von Ihren gegenwärtigen Bedürfnissen ist, was zu unerwartetem Verhalten führt; du musst dich dagegen wehren.

Diese Lösung versucht nicht sicherzustellen, dass die vom Benutzer angegebene Eingabe tatsächlich eine Nummer ist. Ich werde dieses Problem für Sie zurücklassen (Hinweis: alles, was Sie brauchen, ist dort in the Python tutorial).

3

Randbemerkung: Wenn Sie die Summe aller Ziffern erhalten möchten, können Sie einfach tun

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

Wie ghills bereits

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

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

erwähnt hatte Wenn Sie durch etwas, Looping, Stichwort "IN", denken Sie immer nur an eine Liste von etwas. Sie können keine Ganzzahl durchgehen. Daher ist es nicht iterierbar.

0

Nehmen Sie Ihre Eingabe und stellen Sie sicher, dass es eine Zeichenfolge ist, so dass es iterierbar ist.

Führen Sie dann ein Listenverständnis durch und ändern Sie jeden Wert auf eine Zahl zurück.

Nun können Sie die Summe aller Zahlen tun, wenn Sie wollen:

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

Oder, wenn Sie wirklich die Ausgabe sehen wollen, während es ausgeführt wird:

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

Sie können versuchen, zu ändern for i in inp: in for i in range(1,inp): Iteration funktioniert nicht mit einem einzigen Int. Stattdessen müssen Sie einen Bereich angeben, in dem es ausgeführt werden kann.

0

Machen Sie es nicht int(), aber machen Sie es range() wird dieses Problem lösen.

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

vielleicht Sie versuchen zu

for i in range(inp) 

ich diesen Fehler nur hatte, weil ich nicht range()