Saya setuju, ini lebih seperti 'elif not [kondisi (s) menaikkan istirahat]'.
Saya tahu ini adalah utas lama, tetapi saya sedang melihat pertanyaan yang sama sekarang, dan saya tidak yakin ada yang menangkap jawaban atas pertanyaan ini dengan cara yang saya pahami.
Bagi saya, ada tiga cara "membaca" else
dalam For... else
atau While... else
pernyataan, yang semuanya setara, adalah:
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)
(mungkin ada kondisi seperti itu, atau Anda tidak akan memiliki loop)
Jadi, pada dasarnya, "lain" dalam satu lingkaran benar-benar merupakan "elif ..." di mana '...' adalah (1) tidak ada istirahat, yang setara dengan (2) BUKAN [kondisi (s) kenaikan istirahat).
Saya pikir kuncinya adalah bahwa else
tidak ada gunanya tanpa 'istirahat', jadi for...else
termasuk:
for:
do stuff
conditional break # implied by else
else not break:
do more stuff
Jadi, elemen-elemen penting dari sebuah for...else
loop adalah sebagai berikut, dan Anda akan membacanya dalam bahasa Inggris yang lebih jelas sebagai:
for:
do stuff
condition:
break
else: # read as "else not break" or "else not condition"
do more stuff
Seperti yang dikatakan poster lainnya, jeda umumnya dinaikkan ketika Anda dapat menemukan apa yang dicari lingkaran Anda, sehingga jeda else:
menjadi "apa yang harus dilakukan jika item target tidak ditemukan".
Contoh
Anda juga dapat menggunakan penanganan eksepsi, istirahat, dan untuk loop secara bersamaan.
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")
Hasil
x: 0
x: 1
x: 2
ASSERTION ERROR: x is 2
----------
# loop not completed (hit break), so else didn't run
Contoh
Contoh sederhana dengan istirahat dipukul.
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")
Hasil
y: 0
y: 1
y: 2
BREAK: y is 2
----------
# loop not completed (hit break), so else didn't run
Contoh
Contoh sederhana di mana tidak ada istirahat, tidak ada kondisi meningkatkan istirahat, dan tidak ada kesalahan yang ditemui.
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")
Hasil
z: 0
z: 1
z: 2
z_loop complete without break or error
----------