2016-03-03 5 views
10

में 'लूप' लूप व्यवहार लूप के अंत में निम्नलिखित सरल पाश i के मूल्य को क्यों नहीं बचा रहा है?पाइथन

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

ऊपर प्रिंट:

1 
2 
3 
4 
5 
6 
7 
8 
9 

लेकिन इसे प्रिंट करना चाहिए:

1 
4 
7 
+0

संभवतः [संबंधित स्पष्टीकरण ] (http://stackoverflow.com/questions/35618307/how-to-transform-string-into-dict/35618686#35618686)। – Ian

+8

वह उस तरह से क्यों काम करेगा? यह पूरी तरह से अंतर्ज्ञानी है। – Andrey

+2

आपका चर "मुद्रित" में सेट किया जा रहा है, मुद्रित है और फिर आप अतिरिक्त करते हैं। यदि आप उस आउटपुट को चाहते हैं तो आपको "प्रिंट i + 3" – miguels

उत्तर

41

forसेटi प्रत्येक यात्रा, वस्तु से अगले मूल्य के लिए खत्म हो दोहराया जा रहा है। जो भी आप लूप में i सेट करते हैं उस बिंदु पर अनदेखा किया जाता है।

for statement documentation से:

सूट तो आरोही सूचकांक के क्रम में, इटरेटर द्वारा प्रदान की प्रत्येक आइटम के लिए एक बार निष्पादित कर रहा है। बदले में प्रत्येक आइटम को असाइनमेंट के मानक नियमों का उपयोग करके लक्ष्य सूची में असाइन किया जाता है, और फिर सूट निष्पादित किया जाता है।

i यहाँ लक्ष्य सूची है, इसलिए यह range(1, 10) वस्तु से प्रत्येक मान असाइन किया गया है। i को बाद में किसी अन्य चीज़ पर सेट करने से range(1, 10) अभिव्यक्ति उत्पन्न नहीं होती है।

यदि आप एक लूप बनाना चाहते हैं जहां आप i बदलते हैं, तो while लूप का उपयोग करें; यह हालत के माध्यम से हर बार फिर से परीक्षण:

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

लेकिन यह सिर्फ एक कदम के साथ एक range() उपयोग करने के लिए, सामने मूल्यों उत्पादन आसान होगा:

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

और मैं यह कैसे नहीं कर सकता? –

+15

@ निशांतसिंह आप अपनी 'सीमा (1,10,3) ' – Ian

+0

में कदम को नियंत्रित कर सकते हैं अच्छा जवाब! यहां मुख्य बिंदु यह है कि कोई परीक्षण नहीं चल रहा है। पाइथन में लूप के लिए अन्य भाषाओं के लूप के लिए 'डू-टेस्ट-दोहराना' की बजाय एक वास्तविक लूप, एक पुनरावृत्ति है। जावा में, मुझे लगता है, प्रत्येक 'लूप के लिए' है, जो कि अजगर पाश के समान है; शायद इस तरह के नामकरण से यह थोड़ा और स्पष्ट हो जाता है कि वह लूप कैसे व्यवहार करता है, है ना? –