Bài 21

Câu lệnh lặp while

Biết và thực hành giải các bài toán sử dụng lệnh lặp while với số lần không biết trước, biết ba cấu trúc lập trình cơ bản: tuần tự, rẽ nhánh, lặp.

🚀

1. Khởi động (Engagement)

Cho các việc được ghi trong cột A và cột B của bảng sau:

AB
Vận động viên chạy 20 vòng xung quanh sân vận động.Vận động viên chạy nhiều vòng xung quanh sân vận động trong thời gian 2 tiếng.
Em làm 5 bài tập thầy cô giao về nhà.Em làm các bài tập về nhà đến giờ ăn cơm thì dừng lại.
Em đi lấy 15 xô nước giúp mẹ.Em xách các xô nước giúp mẹ cho đến khi đầy thùng nước.

💡 Câu hỏi suy ngẫm: Đối với mỗi hàng, em hãy cho biết:

  • Công việc được lặp đi lặp lại là gì?
  • Điều kiện để dừng công việc là gì?
  • Số lần thực hiện việc lặp giữa hai cột có gì khác nhau?

Cột A có số lần lặp biết trước, cột B có số lần lặp không biết trước - phụ thuộc vào điều kiện.

📖

2. Hình thành kiến thức (Knowledge)

1. Lệnh lặp while

Lệnh while thực hiện khối lệnh với số lần lặp không biết trước. Khối lệnh lặp được thực hiện cho đến khi <điều kiện> = False.

a) Cú pháp lệnh while

while <điều kiện>:
    <khối lệnh>
Python Script

Quy tắc quan trọng:

  • Sau dấu ":", khối lệnh lặp cần được viết lùi vào và thẳng hàng
  • Mặc định các lệnh sẽ lùi vào 1 tab hoặc 4 dấu cách
  • <điều kiện> là biểu thức logic

Cơ chế hoạt động: Khi thực hiện lệnh, Python sẽ kiểm tra <điều kiện>, nếu đúng thì thực hiện <khối lệnh>, nếu sai thì kết thúc lệnh while.

Điều kiện lặp: Nếu <điều kiện> là False thì dừng lặp.

b) Ví dụ cơ bản

Ví dụ 1: Quan sát đoạn chương trình sau và cho biết S là giá trị của biểu thức toán học nào?

S = 0
k = 1
while k*k < 100:
    S = S + k*k
    k = k + 1
Python Script

Giải thích: Đoạn chương trình tính tổng 1² + 2² + ... + k² với điều kiện k² < 100. Vậy S chính là tổng bình phương các số tự nhiên nhỏ hơn 10.

Ví dụ 2: Thực hiện các lệnh sau. Kết quả sẽ in ra những số nào?

k = 2
while k < 50:
    print(k, end = " ")
    k = k + 3
Python Script

Giải thích: Vòng lặp while sẽ dừng khi k vượt quá 50. Bắt đầu vòng lặp, k = 2. Sau mỗi bước lặp k tăng lên 3 đơn vị. Do vậy, kết quả sẽ phải in ra dãy sau:

2 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47
Python Script

Ví dụ 3: Tính tổng các số trong dãy số học

S = 0
k = 1
while k < 100:
    S = S + k
    k = k + 7
print(S)    # 750
Python Script

Giải thích: Lệnh lặp sẽ dừng khi k ≥ 100 và giá trị S nhận được là tổng 1 + 8 + 15 + ... + 99.

Lưu ý quan trọng
  • while là lệnh lặp với số lần không biết trước.
  • Số lần lặp của lệnh while phụ thuộc vào điều kiện của lệnh.
  • Cần có lệnh thay đổi điều kiện bên trong vòng lặp để tránh lặp vô tận.
🧩

3. Luyện tập (Practice)

Bài tập thực hành

Bài tập 1:

Quan sát đoạn chương trình sau, giải thích kết quả in ra.

S = 0
k = 1
while k < 100:
    S = S + k
    k = k + 7
print(S)
Python Script

Bài tập 2:

Viết chương trình nhập vào một số nguyên dương n. Tính tổng các số từ 1 đến n bằng lệnh while.

Gợi ý:

S = 0
i = 1
while i <= n:
    S = S + i
    i = i + 1
print(S)
Python Script

Bài tập 3:

Viết chương trình in ra các số chẵn nhỏ hơn 100 bằng lệnh while.

Bài tập 4:

Viết chương trình tính tổng các số lẻ nhỏ hơn n (n nhập từ bàn phím).

Thực hành tại máy:

Viết chương trình nhập vào một số nguyên dương. Đếm và in ra số chữ số của số đó.

Gợi ý: Dùng phép chia // để bỏ chữ số cuối cùng, lặp cho đến khi số bằng 0.

🌟

4. Vận dụng (Application)

Ba cấu trúc lập trình cơ bản

Trong lập trình, có ba cấu trúc cơ bản:

  1. Tuần tự: Các lệnh thực hiện lần lượt theo thứ tự
  2. Rẽ nhánh: Dùng lệnh if để chọn thực hiện một trong nhiều nhánh
  3. Lặp: Dùng lệnh for hoặc while để thực hiện lặp lại công việc

Bài tập vận dụng

Bài tập 1: Đảo ngược số

Viết chương trình nhập vào một số nguyên dương n. In ra số đảo ngược của n.

Ví dụ: n = 1234 → in ra 4321

Gợi ý:

n = int(input("Nhập số nguyên dương n: "))
so_dao_nguoc = 0
while n > 0:
    chu_so = n % 10
    so_dao_nguoc = so_dao_nguoc * 10 + chu_so
    n = n // 10
print("Số đảo ngược:", so_dao_nguoc)
Python Script

Bài tập 2: Kiểm tra số hoàn hảo

Số hoàn hảo là số bằng tổng các ước số thực sự của nó (không kể chính nó). Viết chương trình kiểm tra số n có phải là số hoàn hảo không.

Ví dụ: 6 = 1 + 2 + 3 (số hoàn hảo)

Gợi ý: Dùng vòng lặp while để tìm các ước số và tính tổng.

Bài tập 3: Đoán số

Viết chương trình trò chơi đoán số:

  • Máy tính chọn ngẫu nhiên một số từ 1 đến 100
  • Người chơi đoán số, máy tính báo "Lớn hơn" hoặc "Nhỏ hơn"
  • Cho đến khi đoán đúng thì dừng

Gợi ý: Dùng while để lặp cho đến khi đoán đúng.

Thảo luận:

  • Khi nào nên dùng while thay cho for?
  • Lỗi nào thường gặp khi viết vòng lặp while?
  • Tại sao cần cập nhật biến điều kiện trong vòng lặp while?

Ghi nhớ kiến thức 🎯

  • ✅ while lặp khi điều kiện đúng, dừng khi điều kiện sai.
  • ✅ Cần có lệnh cập nhật điều kiện bên trong vòng lặp.
  • ✅ for dùng khi biết trước số lần lặp, while dùng khi không biết trước.
  • ✅ Ba cấu trúc lập trình cơ bản: Tuần tự, Rẽ nhánh, Lặp.
  • ✅ Thụt lề đúng quy cách là bắt buộc trong Python.

Chúc mừng bạn đã hoàn thành bài học này! 🏆