2016-03-03 16 views
10

Aşağıdaki basit döngü döngü sonunda i değerini kaydetmiyor?'Python'da döngü davranışı için

for i in range(1, 10): 
    print i 
    i = i + 3 

yukarıdaki baskılar:

1 
2 
3 
4 
5 
6 
7 
8 
9 

Ama basmalı:

1 
4 
7 
+0

[related açıklama ] (http://stackoverflow.com/questions/35618307/how-to-transform-string-into-dict/35618686#35618686). – Ian

+8

Bu neden böyle çalışır? Bu tamamen karşı sezgisel. – Andrey

+2

değişkeniniz "for" olarak ayarlandı, yazdırıldı ve sonra ek yapıyorsunuz. Eğer bu çıktıya isterseniz "print i + 3" yazmalısınız – miguels

cevap

41

forsetlerii her yineleme, nesneden sonraki değere üzerinde yinelenilen. Döngünün içine i'u ne ayarlamış olursanız olun bu noktada göz ardı edilir. for statement documentation itibaren

:

paketi daha sonra artan endeksleri sırasıyla, yineleyici tarafından sağlanan her öğe için bir kez gerçekleştirilir. Sırayla her bir öğe, atamalar için standart kuralları kullanarak hedef listeye atanır ve daha sonra süit yürütülür.

i

burada hedef listesi, bu yüzden range(1, 10) nesneden her değer atanır. i öğesinin daha sonra başka bir şeye ayarlanması, range(1, 10) ifadesinin üretilmesini değiştirmez.

i değiştirdiğiniz bir döngü oluşturmak istiyorsanız, bunun yerine bir while döngü kullanın; içinden koşul her zaman-testleri yeniden:

i = 1 
while i < 10: 
    print i 
    i += 3 

ama sadece ön değerleri üreten bir adımla bir range() kullanmak daha kolay olacak: Muhtemelen

for i in range(1, 10, 3): 
    print i 
+0

ve bunu nasıl gerçekleştiremiyorum? –

+15

@NishantSingh, aralığınızı (1,10,3) ' – Ian

+0

İyi cevabınız ile kontrol edebilirsiniz. Burada önemli olan nokta testin devam etmemesidir. Python'da döngü için, diğer dillerin döngüleri için "yap-test-tekrarla" yerine gerçek bir döngü, bir yineleme vardır. Java'da sanırım python döngüsüne daha çok benzeyen her bir 'döngü' var; belki de böyle bir adlandırma, bu döngünün nasıl davrandığını biraz daha netleştirir, değil mi? –