数值 for 循环
使用 for i=start,limit,step 语法遍历数值范围。
数值 for 循环 是 CoddyKit 上的免费 Lua Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Lua Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Lua Academy 课程共包含 4 节课。
数值 for 语法
Lua 的数值 for 循环形式为 for var = start, limit, step do。如果省略 step,其默认值为 1。循环变量仅在循环体内是局部变量,不能在循环体内修改。循环开始前会计算一次上限和步长。
-- Count 1 to 5
for i = 1, 5 do
io.write(i .. " ")
end
print() -- 1 2 3 4 5
-- Count with step 2
for i = 1, 10, 2 do
io.write(i .. " ")
end
print() -- 1 3 5 7 9使用负步长倒计时
使用负步长可以递减计数。当步长为负数时,只要 var >= limit,循环就会继续。如果步长为负数时起始值已经小于上限,循环体将不会执行。
for i = 10, 1, -1 do
io.write(i .. " ")
end
print()
-- 10 9 8 7 6 5 4 3 2 1
-- Step -2
for i = 10, 0, -2 do
io.write(i .. " ")
end
print()
-- 10 8 6 4 2 0循环变量是局部变量
循环控制变量(i)会自动成为局部变量。您不能在循环内更改它的值——Lua 会忽略对循环变量的赋值。如果要以其他方式跟踪迭代次数,请使用单独的局部变量。
for i = 1, 5 do
-- i is read-only inside the loop
-- i = i + 10 -- this creates a new global i, not the loop var
print(i) -- always 1, 2, 3, 4, 5 as expected
end
-- i is nil here (it was local to the loop)
print(i) -- nil (or whatever global i was)遍历数组
数值 for 最常见的用途是按索引遍历数组。使用 #arr 作为上限。与 ipairs 不同,这种形式可以控制步长并反向遍历,而且对于稠密数组来说速度略快。
local fruits = {"apple", "banana", "cherry", "date"}
for i = 1, #fruits do
print(i, fruits[i])
end
-- 1 apple
-- 2 banana
-- 3 cherry
-- 4 date使用 for 求和
数值 for 循环非常适合对数组中的值进行累加。模式始终相同:在循环前初始化结果变量,在循环内更新它,并在循环后使用它。
local values = {10, 20, 30, 40, 50}
local total = 0
for i = 1, #values do
total = total + values[i]
end
print("Total:", total) -- 150
print("Count:", #values) -- 5
print("Mean:", total / #values) -- 30嵌套数值 for
可以嵌套两个数值 for 循环,用于矩阵遍历、遍历表的表,或生成坐标对等二维操作。外层循环处理行,内层循环处理列;每次迭代访问一个单元格。
local rows, cols = 3, 4
for r = 1, rows do
for c = 1, cols do
io.write(string.format("%2d ", r * c))
end
print()
end
-- 1 2 3 4
-- 2 4 6 8
-- 3 6 9 12浮点步长
步长和上限可以是浮点数,但这可能引入精度误差。若需要精确的迭代次数,请使用整数。如果必须使用浮点数,请注意循环次数的计算方式为 floor((limit - start) / step) + 1。
-- Float step
for x = 0.0, 1.0, 0.25 do
io.write(x .. " ")
end
print()
-- 0.0 0.25 0.5 0.75 1.0
-- Prefer integer math when possible
for i = 0, 4 do
local x = i * 0.25
io.write(x .. " ")
end构建结果表
数值 for 循环是根据现有数据构建新表的标准方式。先创建一个空表,然后使用循环按索引填充它。
local source = {1, 2, 3, 4, 5}
local squares = {}
for i = 1, #source do
squares[i] = source[i] ^ 2
end
for i = 1, #squares do
print(squares[i]) -- 1, 4, 9, 16, 25
end数值 for 中的 break
您可以使用 break 提前退出数值 for 循环。执行会跳转到 end 之后的语句。这对于线性搜索很有用:一直遍历到找到目标,然后退出循环。
local data = {5, 3, 8, 1, 9, 2, 7}
local target = 9
local foundAt = nil
for i = 1, #data do
if data[i] == target then
foundAt = i
break
end
end
if foundAt then
print("Found at index " .. foundAt) -- 5
else
print("Not found")
end循环次数计算
for i = start, limit, step 的迭代次数为 max(0, floor((limit - start) / step) + 1)。理解这一点可以避免差一错误。当步长为 1 时,次数就是 limit - start + 1。
-- How many iterations?
local count = 0
for i = 1, 10, 3 do
count = count + 1
end
print(count) -- 4 (i = 1, 4, 7, 10)
count = 0
for i = 5, 1 do -- step=1 but start > limit
count = count + 1
end
print(count) -- 0 (no iterations)快速检查
for i = 10, 1, -3 do 会遍历哪些值?
回顾:数值 for
总结:
for i = start, limit, step do—— 步长默认为 1- 使用负步长倒计时
- 循环变量会自动成为局部变量,并且是只读的
- 循环开始前只计算一次上限和步长
break可以提前退出- 标准模式:构建结果表、搜索数组、累加总和
常见问题解答
「数值 for 循环」课时是免费的吗?
是的 — 「数值 for 循环」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Lua Academy 课程的其余内容,请升级到 CoddyKit PRO。 Lua Academy 课程共包含 4 节课。
「数值 for 循环」这节课中我会学到什么?
使用 for i=start,limit,step 语法遍历数值范围。 你通过在浏览器中直接运行的动手代码来练习 Lua Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Lua Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Lua Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「数值 for 循环」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Lua Academy 课中编写并运行代码吗?
能。每节 Lua Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。