Bài 7 — Trò chơi đoán số (vòng lặp while + random)
🎯 Mục tiêu bài học
- Hiểu vòng lặp while: lặp lại khi điều kiện còn đúng.
- Biết dùng thư viện random để máy chọn một số ngẫu nhiên.
- Ghép while + if/else để tự tay làm một trò chơi đoán số hoàn chỉnh.
Vòng lặp while: cứ lặp lại việc đoán cho tới khi điều kiện đúng.
Câu chuyện: Máy tính nghĩ ra một con số bí mật từ 1 đến 10. Nhiệm vụ của em là đoán cho tới khi trúng. Mỗi lần đoán sai, máy sẽ mách nhỏ "lớn hơn" hay "nhỏ hơn". Muốn làm được điều đó, ta cần một vòng lặp biết lặp lại chừng nào chưa đúng — đó chính là while.
1. Vòng lặp while — lặp khi điều kiện còn đúng
while đọc là "chừng nào". Máy sẽ chạy đi chạy lại khối lệnh bên trong chừng nào điều kiện còn đúng. Khi điều kiện sai, vòng lặp dừng.
dem = 1 while dem <= 3: print("Xin chao", dem) dem = dem + 1
Đọc thử: in "Xin chao 1", "Xin chao 2", "Xin chao 3". Khi dem thành 4 thì 4 <= 3 là sai → dừng.
Rất quan trọng: phải có dòng làm điều kiện tiến dần tới chỗ sai (ở đây là dem = dem + 1). Nếu quên, máy lặp mãi mãi — gọi là vòng lặp vô tận!
2. So sánh while với for
Ở Bài 4 ta học for: dùng khi biết trước lặp bao nhiêu lần. Còn while dùng khi chưa biết trước — cứ lặp tới khi một điều gì đó xảy ra (đoán trúng, hết pin, người chơi gõ "thoi"...).
| Loại | Dùng khi nào | Ví dụ |
|---|---|---|
| for | Biết trước số lần | In bảng cửu chương 2 (đúng 10 dòng) |
| while | Chưa biết trước, lặp tới khi đạt | Đoán số tới khi đúng |
3. Thư viện random — máy bốc số ngẫu nhiên
Muốn máy chọn một số bất kỳ, ta mượn thư viện có sẵn tên là random. Đầu chương trình viết import random, rồi dùng random.randint(1, 10) để lấy một số nguyên ngẫu nhiên từ 1 đến 10 (cả 1 và 10 đều có thể ra).
Máy tính bốc ngẫu nhiên một số và giấu đi để em đoán.
import random bi_mat = random.randint(1, 10) print("May da chon xong mot so!")
Mẹo: mỗi lần chạy, số bí mật thường khác nhau — vì thế trò chơi không bao giờ chán.
4. Ghép lại thành trò chơi đoán số
Bây giờ ta gộp cả ba thứ: random chọn số, while cho đoán nhiều lần, if/else để so sánh và mách nước.
import random bi_mat = random.randint(1, 10) doan = 0 while doan != bi_mat: doan = int(input("Doan mot so 1-10: ")) if doan < bi_mat: print("Lớn hơn nhé!") elif doan > bi_mat: print("Nho hon nhe!") print("Chinh xac! Gioi qua!")
Dấu != nghĩa là "khác". while doan != bi_mat đọc là: "chừng nào số đoán còn khác số bí mật thì tiếp tục đoán".
5. Ghi nhớ nhanh
| Câu lệnh | Ý nghĩa |
|---|---|
| while dieu_kien: | Lặp chừng nào điều kiện còn đúng |
| import random | Mượn thư viện số ngẫu nhiên |
| random.randint(1, 10) | Lấy số nguyên ngẫu nhiên 1..10 |
| != | Khác nhau |
| doan = doan + 1 | Cập nhật để vòng lặp tiến tới chỗ dừng |
✎ Phần A — Trắc nghiệm (5 câu)
Câu 1. Vòng lặp while lặp lại khối lệnh khi nào?
while lặp lại chừng nào điều kiện còn đúng. Khi điều kiện thành sai, vòng lặp dừng ngay.
Câu 2. Đoạn nào giúp máy chọn một số ngẫu nhiên từ 1 đến 10?
Ta cần import random rồi dùng random.randint(1, 10) để lấy số nguyên ngẫu nhiên (cả 1 và 10 đều có thể ra).
Câu 3. Điều gì xảy ra nếu QUÊN dòng làm điều kiện tiến tới chỗ sai (ví dụ quên dem = dem + 1)?
Nếu điều kiện không bao giờ thành sai, while cứ chạy hoài — gọi là vòng lặp vô tận. Luôn nhớ cập nhật biến điều kiện.
Câu 4. Trong trò chơi đoán số, dấu != trong while doan != bi_mat nghĩa là gì?
!= là "khác". Vòng lặp tiếp tục chừng nào số đoán còn khác số bí mật; khi bằng nhau thì dừng.
Câu 5. Muốn dùng được random, đầu chương trình phải viết gì?
import random báo cho máy biết ta muốn mượn thư viện random để dùng các lệnh của nó.
💻 Phần B — Tự tay chơi thử
Chơi trò đoán số ngay đây! Bấm Chạy, máy sẽ hỏi em đoán số. Gõ một số từ 1 đến 10 rồi bấm OK. Máy sẽ mách "Lớn hơn" hoặc "Nhỏ hơn" cho tới khi em trúng.
(Kết quả sẽ hiện ở đây sau khi em bấm Chạy...)
Thử thách: Đổi randint(1, 10) thành randint(1, 100) để chơi khó hơn. Hoặc thêm một biến so_lan đếm số lần đoán rồi in ra cuối trò chơi: em giỏi cỡ nào?