2017-08-09 2 views
-1
s = 0 

for s in xrange(0, 100): 
    print "s before", s 
    if s % 10 == 0: 
     s += 10 
    print "s after", s 

result of loop1en utilisant la sortie xrange ne devrait pas

s = 0 

while s < 100: 
    print "s before", s 
    if s % 10 == 0: 
     s += 10 
    s += 1 
    print "s after", s 

result of loop2

Comme les images montrées ci-dessus, pourquoi ces 2 boucles à faire des choses similaires, un à l'aide xrange alors qu'un autre en utilisant la boucle while me donne exactement sortie différente?

+0

Ce sont des boucles différentes! – Arman

+1

Parce que 'for' définit' s' à partir de l'itératif, et la définition de 's' à quelque chose d'autre dans la boucle ne change pas l'itérable. –

+0

Vous demandez essentiellement pourquoi 's = first_thing' alors' s = second_thing' n'a pas changé 'first_thing'. –

Répondre

1

s dans la première boucle est écrasant par les valeurs provenant de xrange(0, 100) alors que dans la seconde boucle vous êtes manuellement initialisant la variable s=0 et incrémenter ensuite avec s += 10. Donc, c'est exactement le comportement attendu.

Vous devez jeter un coup d'œil sur la portée des variables dans python. Vérifiez cette discussion: Short Description of the Scoping Rules?

+0

Merci beaucoup pour votre réponse et votre lien partagé. –

+0

@SamY si la réponse a été utile envisager de l'accepter :) – MedAli