Hai lí do để kết thúc, một khối hoặc
Bản giới hạn chỉ cho đoán **nhiều nhất 7 lượt**. Sau khi nhận câu trả lời đầu, `so_luot = 1`. Trước lượt hỏi tiếp, khối **lặp đến khi** kiểm: `so_doan = so_bi_mat` **hoặc** `so_luot = 7`. Nếu một vế đúng, vòng lặp dừng. Dùng `so_luot > 7` là quá muộn vì có thể cho hỏi lượt thứ tám. Dùng khối **và** cũng sai: người chơi đoán đúng sớm mà chưa đến 7 lượt sẽ không dừng.
Bài luyện
Điều kiện dừng đúng cho trò tối đa 7 lượt là gì?
Đoán đúng sớm phải được dừng ngay.
Một trong hai lí do đủ để kết thúc vòng hỏi.
Điều kiện này có thể cho hỏi lượt thứ tám.
Đoán thấp chỉ cần gợi ý, không phải kết thúc.
Lời giải
Vòng hỏi kết thúc khi đoán trúng **hoặc** đã dùng đủ 7 lượt. Biểu thức dùng khối hoặc, không dùng và.
Dừng vòng lặp rồi mới xét thắng hay thua
Sau vòng lặp, **điều kiện thắng là `so_doan = so_bi_mat`**. Nếu không bằng, trò kết thúc vì hết bảy lượt và thông báo chưa trúng. Chỉ nhìn `so_luot = 7` để quyết định thua sẽ sai khi đoán đúng ở lượt thứ bảy: lúc đó cả hai điều kiện dừng đều đúng, nhưng người chơi vẫn thắng. Thông báo số lượt nên dùng khối **nối/join** để ghép chữ với biến đếm; khối cộng `+` là phép cộng số, không phải khối ghép câu.
Bài luyện
Người chơi đoán đúng ở lượt thứ bảy. Sau khi vòng lặp dừng, kết luận nào đúng?
Đủ 7 lượt không xóa kết quả đoán đúng.
Đã có kết quả đúng nên không hỏi thêm.
So sánh câu trả lời cuối với số bí mật quyết định thắng.
Hai điều kiện dừng cùng đúng vẫn cho kết quả thắng rõ ràng.
Lời giải
Vòng lặp dừng vì đã trúng và cũng đã đủ 7 lượt. Điều kiện thắng xét `so_doan = so_bi_mat`; ở đây đúng nên thông báo thắng sau 7 lượt.
Bài luyện
Sau sáu lượt đều sai, biến đếm bằng 6. Lượt tiếp theo cũng sai và biến thành 7. Chương trình đúng sẽ làm gì?
Đủ 7 lượt là điều kiện dừng, không hỏi thêm.
Số cuối vẫn sai nên không thắng.
Không có lý do đặt lại biến giữa một ván.
Đủ giới hạn và chưa đúng nên kết thúc với thông báo chưa trúng.
Lời giải
Sau câu hỏi thứ bảy, `so_luot = 7` và số đoán khác số bí mật. Điều kiện dừng đúng, vòng lặp thoát; nhánh kết quả báo chưa trúng.
Bài luyện
Cần hiển thị `"Đúng sau 4 lượt."` bằng phần chữ và biến `so_luot = 4`. Khối nào dùng để ghép thông báo?
Cộng số không phải phép ghép thông báo.
Nối/join ghép phần chữ, giá trị biến và phần cuối câu.
Ngẫu nhiên không tạo thông báo theo bộ đếm.
So sánh trả về đúng/sai.
Lời giải
Thông báo là xâu kí tự. Dùng khối nối/join để ghép `"Đúng sau "`, giá trị `so_luot` và `" lượt."`; khối cộng số không phục vụ việc này.
Thực hành ba trường hợp biên
**Nhiệm vụ:** mở dự án BTVN, chạy trò và đối chiếu bộ đếm với kết quả thắng/thua.
**Dữ liệu:** tệp `g8-doan-so-bay-luot.sb3` do BTVN tạo. Số bí mật được Scratch lấy ngẫu nhiên từ 1 đến 100 mỗi ván. Để thử chủ động, có thể bật hiển thị biến `so_bi_mat` **trên bản sao dùng để kiểm**; khi chơi bình thường thì ẩn biến này để giữ bí mật.
**Trình tự:** chạy và kiểm (1) trúng ngay lượt đầu, (2) sai sáu lần rồi trúng lượt thứ bảy, (3) sai cả bảy lượt. Sau mỗi câu hỏi, nhìn `so_luot` tăng một; sau câu thứ bảy không có câu thứ tám. Kiểm kết quả cuối dựa vào số đoán có bằng số bí mật hay không.
**Kết quả mong đợi:** lần lượt là “Đúng sau 1 lượt.”, “Đúng sau 7 lượt.” và “Hết 7 lượt mà chưa đoán đúng.” Nếu báo thiếu một lượt, kiểm lệnh tăng sau câu hỏi đầu. Nếu trúng lượt bảy mà báo thua, kiểm nhánh kết quả có so sánh hai số hay chỉ xét bộ đếm.
Đang học