Buổi 6: Vòng lặp while
Hôm nay em sẽ học
while: lặp khi chưa biết trước số lần- Vòng lặp vô hạn và cách dừng
break– thoát vòng lặp,continue– bỏ qua một lượt- Khi nào dùng
for, khi nào dùngwhile - Lập trình trò chơi Đoán số!
Bấm vào slide rồi dùng phím ← → để chuyển, phím F để xem toàn màn hình.
Mở toàn màn hình1. Kiến thức chính
Lặp khi chưa biết trước số lần
tien = 0 ngay = 0 while tien < 50000: # lặp TRONG KHI điều kiện còn đúng tien += 2000 ngay += 1 print(ngay) # 25
| Scratch | Python |
|---|---|
| lặp lại cho đến khi < đủ tiền > | while tien < 50000: |
| liên tục | while True: |
while lặp trong khi điều kiện đúng. Hai điều kiện ngược nhau!Vòng lặp vô hạn
Nếu quên thay đổi biến trong vòng lặp, điều kiện luôn đúng và chương trình chạy mãi. Cách dừng: nút Stop trong Thonny hoặc Ctrl + C.
break và continue
while True: x = int(input()) if x == 0: break # thoát hẳn vòng lặp if x < 0: continue # bỏ qua phần còn lại, sang lượt tiếp print(x * 2)
Chọn for hay while?
| Tình huống | Dùng |
|---|---|
| Biết trước số lần: n số, từ 1 đến n | for |
| Lặp đến khi một điều kiện xảy ra | while |
| Lặp mãi, tự quyết định lúc dừng | while True + break |
2. Ghi nhớ và lỗi thường gặp
| Lỗi | Hậu quả |
|---|---|
Quên cập nhật biến trong while | vòng lặp vô hạn |
Viết điều kiện của Scratch (cho đến khi) vào while | vòng lặp không chạy lần nào hoặc chạy sai |
| Khởi tạo giá trị lớn nhất bằng 0 khi các số có thể âm | kết quả sai |
Đếm chữ số bằng while n > 0 khi n = 0 | ra 0 chữ số thay vì 1 |
3. Câu hỏi tự kiểm tra
- Vòng lặp
while x < 10:sẽ chạy bao nhiêu lần nếu bên trong cóx += 3và ban đầux = 1? breakkháccontinuethế nào?- Đề bài: "đọc các số cho đến khi gặp số 0". Nên dùng
forhaywhile?
4. Bài tập về nhà
Bài 1 ★★ – FIBO
Dãy Fibonacci: 1, 1, 2, 3, 5, 8, 13, … (mỗi số bằng tổng hai số đứng trước).
Input: số nguyên n (1 ≤ n ≤ 10¹⁸).
Output: các số Fibonacci không vượt quá n, trên một dòng.
| Input | Output |
|---|---|
10 | 1 1 2 3 5 8 |
1 | 1 1 |
Bài 2 ★★ – CHINHPHUONG
Số chính phương là bình phương của một số nguyên: 1, 4, 9, 16, 25, …
Input: số nguyên n (1 ≤ n ≤ 10¹²).
Output: số chính phương nhỏ nhất lớn hơn hoặc bằng n.
| Input | Output |
|---|---|
10 | 16 |
16 | 16 |
Bài 3 ★★★ (thử thách) – CANSO
Cộng các chữ số của n được một số mới. Lặp lại việc cộng chữ số cho đến khi chỉ còn một chữ số. In chữ số đó.
Ví dụ: 9875 → 9 + 8 + 7 + 5 = 29 → 2 + 9 = 11 → 1 + 1 = 2.
Input: số nguyên n (0 ≤ n ≤ 10¹⁸).
Output: chữ số cuối cùng.
| Input | Output |
|---|---|
9875 | 2 |
7 | 7 |
while lồng nhau – vòng ngoài lặp khi n ≥ 10, vòng trong tính tổng chữ số..py đặt tên theo tên bài. Chạy thử với tất cả ví dụ trước khi nộp!Chưa mở đáp án
Đáp án sẽ được mở sau khi các em nộp bài tập về nhà.
Chưa mở đáp án
Đáp án sẽ được mở sau khi các em nộp bài tập về nhà.