Bài F7. Lệnh lặp

Nội dung lý thuyết

1. Lệnh for

a) Lệnh for sử dụng hàm range()

Hàm range() trong Python được dùng để tạo dãy các số nguyên trong phạm vi nhất định, với cú pháp:

range([<bắt đầu>,] <kết thúc>[, <bước nhảy>])

  • <bắt đầu>: giá trị bắt đầu (mặc định là 0 nếu không có).

  • <kết thúc>: giá trị kết thúc (bắt buộc có).

  • <bước nhảy>: giá trị bước nhảy giữa các phần tử (mặc định là 1 nếu không có).

Ví dụ:

  • range(5) tạo dãy [0, 1, 2, 3, 4]

  • range(1, 5) tạo dãy [1, 2, 3, 4]

  • range(1, 5, 2) tạo dãy [1, 3]

  • range(5, 1, -2) tạo dãy [5, 3]

Cú pháp lệnh for sử dụng hàm range():

for <biến lặp> in range([<bắt đầu>,] <kết thúc>[, <bước nhảy>]):
    <khối lệnh>

Giải thích:

  • Ở mỗi vòng lặp, biến lặp được gán lần lượt các giá trị trong dãy do range() tạo ra.

  • Khối lệnh thực hiện một hoặc nhiều câu lệnh, lặp lại theo từng giá trị của biến lặp.

Ví dụ 1: Tính tổng các số tự nhiên từ 0 đến n:

n = int(input("Nhập số tự nhiên n: "))
tong = 0
for i in range(n+1):
    tong = tong + i
print(f"Tổng các số từ 0 đến {n} là: {tong}")
  • Biến lặp i chạy từ 0 đến n, tính tổng bằng cách cộng dồn các giá trị.

Ví dụ 2: Đếm số tự nhiên nhỏ hơn n:

n = int(input("Nhập số tự nhiên n: "))
dem = 0
for i in range(1, n, 2):
    dem = dem + 1
print(f"Có {dem} số tự nhiên lẻ nhỏ hơn {n}.")
  • Biến i chạy từ 1 đến nhỏ hơn n với bước nhảy 2. Đếm số lần lặp.

Lưu ý:

  • Vùng giá trị của range() có thể rỗng nếu điều kiện không phù hợp.

  • Thân vòng lặp for không cần câu lệnh làm thay đổi giá trị biến lặp.

b) Lệnh for sử dụng bộ dữ liệu

Cú pháp:

for <biến lặp> in (<phần tử 1>, <phần tử 2>, ..., <phần tử N>):
    <khối lệnh>
  • <phần tử 1>, ..., <phần tử N> là một bộ dữ liệu, có thể là tuple, list hoặc các đối tượng có thể lặp được.

  • Mỗi phần tử được gán cho biến lặp theo thứ tự.

Ví dụ 3: Duyệt qua tên các mùa:

for tenMua in ("Xuân", "Hạ", "Thu", "Đông"):
    print(tenMua)
  • Vòng lặp lấy từng phần tử trong bộ dữ liệu và in ra.

2. Lệnh while

Cú pháp:

while <điều kiện>:
    <khối lệnh>
  • <điều kiện>: biểu thức logic, nếu đúng (True) thì thực hiện <khối lệnh>.

  • Vòng lặp tiếp tục lặp lại đến khi điều kiện sai (False).

Ví dụ 4: In các số Fibonacci nhỏ hơn hoặc bằng n:

n = int(input("Nhập số tự nhiên n: "))
print("Các số Fibonacci nhỏ hơn hoặc bằng n:")
a = 0
b = 1
while a <= n:
    print(a, end=" ")
    a, b = b, a + b
  • Tạo dãy Fibonacci: 0, 1, 1, 2, 3,... đến khi vượt quá n.

Ví dụ 5: Minh họa vòng lặp while không dừng:

i = 1
while i <= 5:
    print(i)
  • i luôn bằng 1, điều kiện luôn đúng nên lặp vô hạn.

Ví dụ 6: Minh họa vòng lặp while có điều kiện dừng:

i = 1
while i <= 5:
    print(i)
    i = i + 1
  • Biến i tăng lên sau mỗi lần lặp, kết thúc khi i > 5.

Lưu ý:

  • Để tránh lặp vô hạn, thân vòng lặp phải có lệnh làm thay đổi điều kiện.

  • Số lần lặp phụ thuộc vào điều kiện của lệnh.

3. Lệnh break và continue

  • breakcontinue dùng để thay đổi luồng điều khiển trong vòng lặp forwhile.

  • break: kết thúc vòng lặp.

  • continue: bỏ qua phần còn lại và quay lại kiểm tra điều kiện vòng lặp.

a) Lệnh break

Cú pháp:

if <điều kiện>:
    break
  • Dùng để thoát khỏi vòng lặp ngay lập tức nếu điều kiện đúng.

Ví dụ 6: Tìm số lớn nhất chia hết cho n:

n = int(input("Nhập số nguyên n > 1: "))
for k in range(n // 2, 0, -1):
    if n % k == 0:
        print(f"Số lớn nhất trong các ước nhỏ hơn {n} là: {k}")
        break
else:
    print("n phải lớn hơn 1.")
  • Duyệt từ n//2 giảm dần, tìm ước đầu tiên là kết thúc vòng lặp.

b) Lệnh continue

Cú pháp:

if <điều kiện>:
    continue
  • Dùng để bỏ qua các câu lệnh còn lại trong vòng lặp hiện tại, quay về kiểm tra điều kiện tiếp theo.

Ví dụ 7: In các số từ 1 đến 5, bỏ qua số 4:

for i in range(6):
    if i == 4:
        continue
    print(i)
  • Khi i == 4, lệnh print(i) bị bỏ qua.