Menu
CoddyTech

重复直到循环

本课属于 Coddy Lua 学习旅程的“基础知识”单元。第 72 课,共 90 课。

Lua 还提供了另一种循环,叫作 repeat-until 循环。它有一个独特的特点,让它区别于你刚学过的 while 循环。主要区别在于,无论条件如何,repeat-until 循环都会至少执行一次代码块。

语法如下:

repeat
    -- 要重复执行的代码
until condition

注意,条件会在最后检查,此时代码已经运行过一次。循环会不断重复,直到条件变为 true,这与 while 循环正好相反,后者会在条件为 true 时继续运行。

下面是一个实用示例,它会模拟不断掷骰子,直到掷出 6:

local roll = 0

repeat
    roll = math.random(1, 6) -- 掷出一个 1 到 6 之间的数字
    print("Rolled:", roll)
until roll == 6

print("Finally got a 6!")

这个循环可以确保你至少掷一次骰子,并且会一直掷,直到条件 roll == 6 成立。这种“先执行,后检查”的行为让 repeat-until 循环非常适合这样的情况:你需要先至少执行一次操作,再决定是否继续。

challenge icon

挑战

简单

你正在创建一个简单的密码验证模拟。

  1. 创建一个名为 password 的变量,并将它设为空字符串("")。
  2. 再创建一个名为 correctPassword 的变量,并将它设为 "secure123"。
  3. 创建一个名为 attempts 的表,其中按顺序包含以下密码尝试:
    • "password"
    • "123456"
    • "admin"
    • "secure123"
  4. 创建一个名为 index 的变量,并将它设为 1。你将用它跟踪当前尝试到哪一项。
  5. 使用 repeat-until 循环来完成以下操作:
    • 使用 attempts[index] 将当前尝试赋给 password。这会从表中读取位置 index 上的项目
    • 打印当前的 password
    • 将 index 加 1(例如 index = index + 1),以继续尝试下一项
  6. 只有当 password 等于 correctPassword 时,循环才应停止。

每次循环运行时,都会从表中读取一次尝试,打印它,然后继续下一项。循环会持续进行,直到找到正确的密码。

亲手试试

-- 初始化变量
local password = ""
local correctPassword = "secure123"

-- 密码尝试列表
local attempts = {"password", "123456", "admin", "secure123"}
local index = 1

-- TODO:
-- 使用 repeat-until 循环:
-- 1. 将当前尝试赋值为说明中的准确文本
-- 2. 输出尝试的密码
-- 3. 进入下一次尝试
-- 当 password 与 correctPassword 匹配时停止
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Lua 在线编译器