it-swarm.com.de

Python - TypeError: 'int' Objekt kann nicht iteriert werden

Hier ist mein Code:

import math

print "Hey, lets solve Task 4 :)"

number1 = input ("How many digits do you want to look at? ")
number2 = input ("What would you like the digits to add up to? ")

if number1 == 1:
    cow = range(0,10)
Elif number1 == 2:
    cow = range(10,100)
Elif number1 == 3:
    cow = range(100,1000)
Elif number1 == 4:
    cow = range(1000,10000)
Elif number1 == 5:
    cow = range(10000,100000)
Elif number1 == 6:
    cow = range(100000,1000000)
Elif number1 == 7:
    cow = range(1000000,10000000)
Elif number1 == 8:
    cow = range(10000000,100000000)
Elif number1 == 9:
    cow = range(100000000,1000000000)
Elif number1 == 10:
    cow = range(1000000000,10000000000)

number3 = cow[-1] + 1

n = 0
while n < number3:
    number4 = list(cow[n])
    n += 1

Ich möchte eine Schleife machen, sodass jedes Element in der Liste in jedes seiner Zeichen zerlegt wird. Angenommen, die Nummer 137 wäre in der Liste, dann würde sie in [1,3,7] umgewandelt werden. Dann möchte ich diese Zahlen zusammen addieren (ich habe dieses Stück noch nicht angefangen, aber ich habe eine Idee, wie es geht).

Ich erhalte jedoch weiterhin die Fehlermeldung

TypeError: 'int' object is not iterable

wenn ich versuche, das auszuführen.

Was mache ich falsch?

45
user2908001

Dein Problem ist mit dieser Zeile:

number4 = list(cow[n])

Es wird versucht, cow[n], der eine ganze Zahl zurückgibt, zu einer Liste zu machen. Dies funktioniert nicht, wie unten gezeigt:

>>> a = 1
>>> list(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>>

Vielleicht wollten Sie cow[n]in eine Liste einfügen:

number4 = [cow[n]]

Sehen Sie sich eine Demonstration unten an:

>>> a = 1
>>> [a]
[1]
>>>

Ich wollte auch zwei Dinge ansprechen:

  1. Ihrer while-Anweisung fehlt am Ende ein :.
  2. Es wird als sehr gefährlich betrachtet, input so zu verwenden, da es seine Eingabe als echten Python-Code auswertet. Besser wäre es hier, raw_input zu verwenden und dann die Eingabe mit int in eine Ganzzahl umzuwandeln.

Um die Ziffern aufzuteilen und sie dann wie gewünscht hinzuzufügen, erstelle ich die Nummer als String. Da Zeichenfolgen iterierbar sind, können Sie sum verwenden:

>>> a = 137
>>> a = str(a)
>>> # This way is more common and preferred
>>> sum(int(x) for x in a)
11
>>> # But this also works
>>> sum(map(int, a))
11
>>>
74
iCodez

Dies ist sehr einfach, wenn Sie versuchen, eine Ganzzahl in ein Listenobjekt zu konvertieren !!! natürlich wird es scheitern und es sollte ...

Um dies anhand des von Ihnen bereitgestellten Beispiels zu demonstrieren/zu beweisen, verwenden Sie einfach die Typfunktion für jeden Fall (siehe unten), und die Ergebnisse sprechen für sich!

>>> type(cow)
<class 'range'>
>>> 
>>> type(cow[0])
<class 'int'>
>>> 
>>> type(0)
<class 'int'>
>>> 
>>> >>> list(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> 
0
grepit