Vòng lặp repeat-until
Thuộc phần Nền tảng cơ bản trong hành trình Lua của Coddy. Bài học 72 trên 90.
Lua có một kiểu vòng lặp khác gọi là vòng lặp repeat-until, với đặc điểm riêng giúp phân biệt nó với vòng lặp while mà bạn vừa học. Điểm khác biệt chính là vòng lặp repeat-until luôn chạy khối lệnh ít nhất một lần, bất kể điều kiện.
Cú pháp như sau:
repeat
-- đoạn code cần lặp lại
until conditionLưu ý rằng điều kiện được kiểm tra ở cuối, sau khi code đã chạy một lần. Vòng lặp tiếp tục lặp lại cho đến khi điều kiện trở thành true, trái ngược với vòng lặp while, vốn tiếp tục chạy khi điều kiện là true.
Đây là một ví dụ thực tế mô phỏng việc gieo xúc xắc cho đến khi bạn được mặt 6:
local roll = 0
repeat
roll = math.random(1, 6) -- Gieo ra một số từ 1 đến 6
print("Rolled:", roll)
until roll == 6
print("Finally got a 6!")Vòng lặp này đảm bảo bạn tung xúc xắc ít nhất một lần và tiếp tục tung cho đến khi điều kiện roll == 6 trở thành đúng. Cách hoạt động «thực hiện trước, kiểm tra sau» này khiến vòng lặp repeat-until rất phù hợp với những tình huống cần một việc xảy ra ít nhất một lần trước khi quyết định có tiếp tục hay không.
Thử thách
DễBạn đang tạo một mô phỏng đơn giản để xác thực mật khẩu.
- Tạo một biến có tên
passwordvà gán cho nó một chuỗi rỗng (""). - Tạo một biến khác có tên
correctPasswordvà gán cho nó"secure123". - Tạo một bảng có tên
attempts, chứa các lần thử mật khẩu sau đây theo đúng thứ tự:"password""123456""admin""secure123"
- Tạo một biến có tên
indexvà gán cho nó1. Bạn sẽ dùng biến này để theo dõi lần thử hiện tại. - Dùng vòng lặp
repeat-untilđể:- Gán lần thử hiện tại cho
passwordbằng cách dùngattempts[index]. Thao tác này đọc phần tử ở vị tríindextrong bảng. - In ra
passwordhiện tại. - Tăng
indexthêm 1 (ví dụ:index = index + 1) để chuyển sang lần thử tiếp theo.
- Gán lần thử hiện tại cho
- Vòng lặp chỉ dừng khi
passwordbằngcorrectPassword.
Mỗi lần chạy, vòng lặp đọc một lần thử từ bảng, in ra giá trị đó rồi chuyển sang lần tiếp theo. Vòng lặp tiếp tục cho đến khi tìm thấy mật khẩu chính xác.
Tự làm thử
-- Khởi tạo các biến
local password = ""
local correctPassword = "secure123"
-- Danh sách các lần thử mật khẩu
local attempts = {"password", "123456", "admin", "secure123"}
local index = 1
-- TODO:
-- Dùng vòng lặp repeat-until để:
-- 1. Gán lần thử hiện tại bằng đúng nội dung trong hướng dẫn
-- 2. In ra mật khẩu đã thử
-- 3. Chuyển sang lần thử tiếp theo
-- Dừng khi password khớp với correctPasswordBài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Nền tảng cơ bản
4Toán tử 2: quan hệ và logic
Toán tử bằngToán tử quan hệToán tử andToán tử orToán tử notĐánh giá ngắn mạchGiá trị truthy và falsyÔn tập: logic đơn giản10Bảng phần 1: kiểu danh sách
Bảng là gì?Tạo bảngTruy cập phần tử theo chỉ sốSửa đổi phần tử theo chỉ sốToán tử độ dài '#'table.insert()table.remove()Ôn tập: quản lý thành viên nhóm13Dự án: Cửa hàng thuốc đơn giản
Thiết lập dự ánThêm một loại thuốc2Biến và kiểu dữ liệu
Biến là gì?Các sốChuỗiGiá trị BooleanGiá trị 'nil'Hàm type()Quy ước đặt tênÔn tập: hồ sơ nhân vật5Đầu ra cơ bản
In các giá trị cố địnhIn biếnIn nhiều giá trịKết hợp chuỗi và biếnHàm tostring()Đầu vàoÉp kiểuÔn tập: Báo cáo trạng tháiÔn tập: Đến 1208Cơ bản về thao tác với chuỗi
string.len()string.upper & string.lowerstring.sub()string.rep()string.find()Ôn tập: định dạng tên người dùng3Toán tử 1: số học và nối chuỗi
Toán tử số họcToán tử chia lấy dưToán tử lũy thừaNối chuỗiThứ tự ưu tiên của toán tửÔn tập: phép tính đơn giản6Dự án: Hiển thị chỉ số nhân vật
Lời chào mừngKhai báo chỉ số nhân vật9Cơ bản về hàm
Khai báo hàmGọi hàmHàm có tham sốHàm có nhiều tham sốCâu lệnh returnÔn tập: Máy tính diện tích12Cơ bản về vòng lặp
Vòng lặp whileVòng lặp repeat-untilVòng lặp for đếm sốVòng lặp for với bước nhảyCâu lệnh breakÔn tập: đếm ngượcTự luyện tập: Trình biên dịch Lua online