मैं सहमत हूं, यह एक 'एलिफ नॉट [कंडीशन (एस) राइजिंग ब्रेक]' की तरह है।
मुझे पता है कि यह एक पुराना धागा है, लेकिन मैं अभी उसी प्रश्न पर गौर कर रहा हूं, और मुझे यकीन नहीं है कि किसी ने भी इस प्रश्न के उत्तर को जिस तरह से समझा है, उस पर कब्जा कर लिया है।
मेरे लिए, या बयानों else
में "पढ़ने" के तीन तरीके हैं , जिनमें से सभी समान हैं:For... else
While... else
else
==
if the loop completes normally (without a break or error)
else
==
if the loop does not encounter a break
else
==
else not (condition raising break)
(संभवतः ऐसी कोई स्थिति है, या आपके पास लूप नहीं होगा)
तो, अनिवार्य रूप से, एक लूप में "और" वास्तव में एक "एलिफ ..." है, जहां '...' (1) कोई ब्रेक नहीं है, जो (2) नहीं के बराबर है (स्थिति) ब्रेक को बढ़ाता है]।
मुझे लगता है कि कुंजी else
'ब्रेक' के बिना बेकार है, इसलिए for...else
इसमें शामिल हैं:
for:
do stuff
conditional break # implied by else
else not break:
do more stuff
तो, एक for...else
लूप के आवश्यक तत्व निम्नानुसार हैं, और आप उन्हें सादे अंग्रेजी में पढ़ेंगे:
for:
do stuff
condition:
break
else: # read as "else not break" or "else not condition"
do more stuff
जैसा कि अन्य पोस्टरों ने कहा है, आम तौर पर एक ब्रेक उठाया जाता है जब आप यह पता लगाने में सक्षम होते हैं कि आपका लूप क्या ढूंढ रहा है, इसलिए else:
"लक्ष्य आइटम स्थित नहीं है तो क्या करना है" बन जाता है।
उदाहरण
आप अपवाद हैंडलिंग, ब्रेक और सभी छोरों के लिए भी एक साथ उपयोग कर सकते हैं।
for x in range(0,3):
print("x: {}".format(x))
if x == 2:
try:
raise AssertionError("ASSERTION ERROR: x is {}".format(x))
except:
print(AssertionError("ASSERTION ERROR: x is {}".format(x)))
break
else:
print("X loop complete without error")
परिणाम
x: 0
x: 1
x: 2
ASSERTION ERROR: x is 2
----------
# loop not completed (hit break), so else didn't run
उदाहरण
ब्रेक के हिट होने के साथ सरल उदाहरण।
for y in range(0,3):
print("y: {}".format(y))
if y == 2: # will be executed
print("BREAK: y is {}\n----------".format(y))
break
else: # not executed because break is hit
print("y_loop completed without break----------\n")
परिणाम
y: 0
y: 1
y: 2
BREAK: y is 2
----------
# loop not completed (hit break), so else didn't run
उदाहरण
सरल उदाहरण जहां कोई विराम नहीं है, विराम को बढ़ाने वाली कोई स्थिति नहीं है, और कोई त्रुटि सामने नहीं आई है।
for z in range(0,3):
print("z: {}".format(z))
if z == 4: # will not be executed
print("BREAK: z is {}\n".format(y))
break
if z == 4: # will not be executed
raise AssertionError("ASSERTION ERROR: x is {}".format(x))
else:
print("z_loop complete without break or error\n----------\n")
परिणाम
z: 0
z: 1
z: 2
z_loop complete without break or error
----------