Voici mon code

A = [0,0,-1,0]
for i in range(len(A)):
    while (i<len(A)) and (A[i] >=0):
        print(i, A[i]) 
        i=i+1

Quand j'exécute ce code en python 3.x ma sortie est

Output

0 0
1 0
1 0
3 0

Ma question est : Lorsque la boucle while se termine pour la première fois, la valeur de i devient 2 depuis A[2] < 0

Mais après cela, quand il va au parent pour la boucle, alors pourquoi la valeur de i redevient 1?

Parce qu'après cela dans la 3ème ligne de sortie, il imprime à nouveau 1 0.

0
Nishant 14 avril 2018 à 04:25

4 réponses

Meilleure réponse

Les boucles Python for ne sont pas comme les boucles C for; la valeur d'itération est remplacée sur chaque boucle, ignorant toutes les modifications apportées à l'intérieur de la boucle. Peu importe ce que vous faites pour i à l'intérieur de la boucle for, lorsque la boucle for boucle, vous tirez la valeur suivante de l'itérateur, donc i progressera toujours à travers tous les valeurs de range une à la fois.

2
ShadowRanger 14 avril 2018 à 01:30

Le problème se produit après la sortie de la boucle while. i est défini sur la valeur suivante dans range(len(A)) qui est 1 pour la prochaine itération de la boucle for.

Vous pouvez résoudre ce problème en initialisant i et en supprimant la boucle for

A = [0,0,-1,0]
i=0
while (i<len(A)) and (A[i] >=0):
   print(i, A[i]) 
   i=i+1

Ou en utilisant la commande break

A = [0,0,-1,0]
for i in range(len(A)):
    if(A[i]<0):
        break
    print(i, A[i])
0
chf2117 14 avril 2018 à 01:34

Essayez d'exécuter le code dans n'importe quel débogueur Python et vous verrez tout cela en même temps. Le code fonctionne correctement. Si vous avez besoin d'un résultat spécifique, demandez, je vous aiderai.

-2
Vladmir Larionov 14 avril 2018 à 04:42

L'instruction 'for' ne fonctionne pas comme en C. La variable i est réaffectée à chaque itération.

Vous pouvez penser à «pour i dans x» comme étant plus semblable: tandis que x a plus de valeurs, définissez i sur la valeur suivante de x.

2
Peter Aylett 14 avril 2018 à 01:32