web-dev-qa-db-fra.com

Python - TypeError: l'objet 'int' n'est pas itérable

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?

45
user2908001

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:

  1. Il manque dans votre déclaration while un : à la fin.
  2. Il est considéré comme très dangereux d’utiliser 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
>>>
74
iCodez

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
>>> 
0
grepit