Tôi đồng ý, nó giống như một 'elif không [điều kiện nâng cao phá vỡ]'.
Tôi biết đây là một chủ đề cũ, nhưng tôi đang xem xét cùng một câu hỏi ngay bây giờ và tôi không chắc ai đã nắm bắt được câu trả lời cho câu hỏi này theo cách tôi hiểu.
Đối với tôi, có ba cách để "đọc" các else
trong For... else
hoặc While... else
báo cáo, tất cả trong số đó là tương đương, bao gồm:
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)
(có lẽ có một điều kiện như vậy, hoặc bạn sẽ không có một vòng lặp)
Vì vậy, về cơ bản, "cái khác" trong một vòng lặp thực sự là "elif ..." trong đó '...' là (1) không nghỉ, tương đương với (2) KHÔNG [điều kiện nâng cao phá vỡ].
Tôi nghĩ điều quan trọng là điều đó else
là vô nghĩa nếu không có 'phá vỡ', do đó, for...else
bao gồm:
for:
do stuff
conditional break # implied by else
else not break:
do more stuff
Vì vậy, các yếu tố thiết yếu của một for...else
vòng lặp như sau và bạn sẽ đọc chúng bằng tiếng Anh đơn giản như:
for:
do stuff
condition:
break
else: # read as "else not break" or "else not condition"
do more stuff
Như các áp phích khác đã nói, một sự phá vỡ thường được nêu ra khi bạn có thể xác định vị trí mà vòng lặp của bạn đang tìm kiếm, do đó else:
trở thành "phải làm gì nếu mục tiêu không được định vị".
Thí dụ
Bạn cũng có thể sử dụng xử lý ngoại lệ, ngắt và cho các vòng lặp cùng nhau.
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")
Kết quả
x: 0
x: 1
x: 2
ASSERTION ERROR: x is 2
----------
# loop not completed (hit break), so else didn't run
Thí dụ
Ví dụ đơn giản với một phá vỡ được nhấn.
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")
Kết quả
y: 0
y: 1
y: 2
BREAK: y is 2
----------
# loop not completed (hit break), so else didn't run
Thí dụ
Ví dụ đơn giản khi không có nghỉ, không có điều kiện nâng cao thời gian nghỉ và không gặp lỗi.
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")
Kết quả
z: 0
z: 1
z: 2
z_loop complete without break or error
----------