Voici mon 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
Je cherche à créer une boucle afin que, pour chaque élément de la liste, il soit décomposé en chacun de ses caractères. Par exemple, supposons que le numéro 137
figure dans la liste, il sera transformé en [1,3,7]
. Ensuite, je veux additionner ces chiffres (je n’ai pas encore commencé, mais j’ai une idée de la façon de le faire).
Cependant, je continue à recevoir le message d'erreur
TypeError: 'int' object is not iterable
quand j'essaye de courir ceci.
Qu'est-ce que je fais mal?
Votre problème est avec cette ligne:
number4 = list(cow[n])
Il essaie de prendre cow[n]
, qui retourne un entier et d’en faire une liste. Cela ne fonctionne pas, comme illustré ci-dessous:
>>> a = 1
>>> list(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>>
Peut-être avez-vous voulu mettre cow[n]
inside dans une liste:
number4 = [cow[n]]
Voir une démonstration ci-dessous:
>>> a = 1
>>> [a]
[1]
>>>
En outre, je voulais aborder deux choses:
:
à la fin.input
comme cela, car il évalue son entrée en tant que code Python réel. Il serait préférable ici d'utiliser raw_input
puis de convertir l'entrée en un entier avec int
.Pour fractionner les chiffres, puis les ajouter comme vous le souhaitez, je commencerais par transformer le nombre en chaîne. Ensuite, puisque les chaînes sont itérables, vous pouvez utiliser sum
:
>>> 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
>>>
C’est très simple, vous essayez de convertir un entier en objet de liste !!! bien sûr, il va échouer et il devrait ...
Pour vous démontrer/vous prouver cela à l'aide de l'exemple que vous avez fourni ... il suffit d'utiliser la fonction type pour chaque cas comme ci-dessous et les résultats parleront d'eux-mêmes!
>>> 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
>>>