Chuyển đến nội dung chính
Mô-đun 2 · Bài học 3 trong tổng số 47/36 trong khóa học~10 min
Bài học theo mô-đun (3/4)

ngắt, tiếp tục và những thứ khác trong vòng lặp

Bên trong một vòng lặp (cả for và while), bạn có thể thay đổi luồng bình thường bằng ba cấu trúc:

  • break — thoát vòng lặp ngay lập tức.
  • continue — bỏ qua phần nội dung còn lại và chuyển sang lần lặp tiếp theo.
  • else (trên vòng lặp) — được thực thi khi vòng lặp kết thúc không có a break.

break

Python
for n in [3, 7, 11, 4, 9]:
    if n % 2 == 0:
        primo_pari = n
        break
primo_pari  # 4

break dừng vòng lặp càng sớm càng tốt. Mọi thứ sau break trong phần thân của lần lặp hiện tại KHÔNG được thực thi.

continue

Python
risultati = []
for n in range(1, 11):
    if n % 2 == 0:
        continue   # skip evens
    risultati.append(n * n)
risultati  # [1, 9, 25, 49, 81]

Hãy coi continue là "chuyển sang lần lặp tiếp theo". Nó được sử dụng để lọc các mục mà không cần thêm một mức thụt lề nào nữa.

else trên vòng lặp (thành ngữ Python)

Một điểm đặc biệt của Python: các vòng lặp cũng có thể có else, chỉ được thực thi nếu vòng lặp kết thúc tự nhiên (không có break). Nó hoàn hảo cho việc tìm kiếm:

Python
target = 7
for n in [2, 4, 6, 8]:
    if n == target:
        trovato = True
        break
else:
    trovato = False
trovato  # False

Đọc như sau: "với mỗi n trong danh sách; nếu bạn chọn nhánh break, hãy bỏ qua cái khác; nếu không thì thực hiện cái khác".

Các vòng lặp lồng nhau: break chỉ thoát ra khỏi vòng lặp trong cùng

Python
for x in range(3):
    for y in range(3):
        if x == y == 1:
            break
        print(x, y)

break chỉ thoát khỏi for y chứ không thoát khỏi for x. Để thoát cả hai bạn phải sử dụng một cờ hoặc hàm + return.

Vòng lặp bất thường...cấu trúc khác

Trong Python, cả hai vòng lặp for và while đều có thể có mệnh đề else tùy chọn. Khối else được thực thi chỉ khi vòng lặp hoàn thành bình thường (tức là không gặp câu lệnh break). Điều này rất hữu ích cho các thuật toán tìm kiếm (ví dụ: "tìm kiếm một phần tử: nếu tìm thấy, hãy ngắt; nếu không, hãy báo cáo rằng nó không được tìm thấy").

Hãy tự mình thử

tập thể dục#python.m2.l3.e1
Nỗ lực: 0Đang tải…

Cho danh sách `numbers = [10, 15, 20, 25, 30, 35]`, tìm số đầu tiên chia hết cho 7 và gán cho `kết quả`. Nếu không tồn tại, gán -1.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

35 là số đầu tiên (và duy nhất) chia hết cho 7 trong danh sách.

Giải pháp khả dụng sau 3 lần thử

Xem lại bài tập

tập thể dục#python.m2.l3.e2
Nỗ lực: 0Đang tải…

Tạo danh sách `số lẻ` với các số lẻ từ 1 đến 20 (bao gồm) bằng cách sử dụng vòng lặp for trên phạm vi (1, 21) và tiếp tục bỏ qua các số chẵn.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Nếu n chẵn thì tiếp tục; nếu không thì nối thêm.

Giải pháp khả dụng sau 3 lần thử

Thử thách bổ sung

tập thể dục#python.m2.l3.e3
Nỗ lực: 0Đang tải…

Given the list `numbers = [7, 11, 14, 21, 25]`, write a `for` loop to find the first number that is divisible by 7 and also strictly greater than 10. When you find it, store it in `found` and exit the loop using `break`. Finally, evaluate `found`.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Inside the loop, check if num % 7 == 0 and num > 10:, assign it to found and trigger break.

Giải pháp khả dụng sau 3 lần thử