2 votes

L'objet 'int' n'est pas itérable lorsque l'on essaie d'assigner un index de boucle.

C'est vraiment étrange, jetez un coup d'œil au code ci-dessous, lorsque je supprime num=i Tout fonctionne bien, mais avec lui, il y a un problème d'itération.

Code d'erreur

In [17]: prim_list=[]
    ...: for i in range(2,101):
    ...:     print i
    ...:     num=i,count=0        # line with issue
    ...:     for j in range(1,i/2):
    ...:         div=j
    ...:         if(num%div==0):
    ...:             count=count+1
    ...:     if(count==1):
    ...:         prim_list.append(num)
    ...:
2
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-17-a8dd2a52322e> in <module>()
      2 for i in range(2,101):
      3     print i
----> 4     num=i,count=0
      5     for j in range(1,i/2):
      6         div=j

TypeError: 'int' object is not iterable

Fonctionne bien

In [19]: prim_list=[]
    ...: for i in range(2,101):
    ...:     count=0              # notice num=i assignment is removed
    ...:     for j in range(1,i/2):
    ...:         div=j
    ...:         if(num%div==0):
    ...:             count=count+1
    ...:     if(count==1):
    ...:         prim_list.append(num)
    ...: print "done"
    ...:
done

Ce que je ne comprends pas, c'est pourquoi l'affectation provoque l'erreur d'itération de la boucle !!!?

Toute aide est appréciée !

6voto

Martijn Pieters Points 271458

Vous utilisez une affectation chaînée :

num=i,count=0

est

num = (i, count) = 0

Donde num = 0 y (i, count) = 0 sont attribuées. Parce que 0 n'est pas un itérable de longueur 2, il ne peut pas être affecté à un tuple de cibles.

Utilisez

num, count = i, 0

ou

num = i
count = 0

à la place.

1voto

Artyer Points 3473

Ce qui se passe ici, c'est que vous interprétez mal l'opérateur virgule. Contrairement au C, il ne vous permet pas de faire des déclarations multiples. Ce qu'il fait, c'est déstructurer l'affectation, par exemple :

a, b = [1, 2]
# a == 1; b == 2

Donc, num=i,count=0 c'est plutôt :

num = i, count = 0
# equivalent to:
num = 0
i, count = 0

Ce qui n'a pas de sens.

Le point-virgule ( ; ) fait ce que vous vouliez, mais allez-y avec une nouvelle ligne :

num = i
count = 0

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X