Menu
CoddyTech

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 condition

Lư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.

challenge icon

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.

  1. Tạo một biến có tên password và gán cho nó một chuỗi rỗng ("").
  2. Tạo một biến khác có tên correctPassword và gán cho nó "secure123".
  3. 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"
  4. Tạo một biến có tên index và gán cho nó 1. Bạn sẽ dùng biến này để theo dõi lần thử hiện tại.
  5. Dùng vòng lặp repeat-until để:
    • Gán lần thử hiện tại cho password bằng cách dùng attempts[index]. Thao tác này đọc phần tử ở vị trí index trong bảng.
    • In ra password hiện tại.
    • Tăng index thêm 1 (ví dụ: index = index + 1) để chuyển sang lần thử tiếp theo.
  6. Vòng lặp chỉ dừng khi password bằng correctPassword.

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 correctPassword
quiz iconTự kiểm tra

Bà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

Tự luyện tập: Trình biên dịch Lua online