ฉันเห็นด้วยมันเหมือน 'elif ไม่ใช่ [เงื่อนไข (การเพิ่มการหยุดพักชั่วคราว)'
ฉันรู้ว่านี่เป็นหัวข้อเก่า แต่ฉันกำลังดูคำถามเดียวกันตอนนี้และฉันไม่แน่ใจว่ามีใครได้รับคำตอบของคำถามนี้ในแบบที่ฉันเข้าใจ
สำหรับฉันมีสามวิธีในการ "อ่าน" 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)
(สมมุติว่ามีเงื่อนไขดังกล่าวหรือคุณไม่มีห่วง)
ดังนั้นโดยพื้นฐานแล้ว "else" ในลูปคือ "elif ... " โดยที่ '... ' คือ (1) ไม่มีการหยุดพักซึ่งเทียบเท่ากับ (2) ไม่ใช่ [เงื่อนไข (s) การเพิ่มการแบ่ง]
ฉันคิดว่ากุญแจสำคัญคือ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
----------