循环
2021-01-04 本文已影响0人
爱折腾的傻小子
循环
- 一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件
- 循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程
序被称为循环体
lua
- Lua提供以下几种循环
循环类型 描述 while 在条件为 true 时,让程序重复地执行某些语句 执行语句前会先检查条件是否为 true for 重复执行指定语句,重复次数可在 for 语句中控制 Lua repeat...until 重复执行循环,直到 指定的条件为真时为止 嵌套循环 可以在循环内嵌套一个或多个循环语句(while、for、do..while)
while
- lua中 while循环语法:
while(confition)
do
statements
end
- condition 循环条件 为 true 时执行循环体语句
- statements 循环体语句 可以是一条或多条语句
while
-- while 循环
aa11 = 10
while( aa11 >= 1 )
do
print(aa11)
aa11 = aa11 - 1
end
--[[
10
9
8
7
6
5
4
3
2
1
]]
for
- Lua 编程语言中 for语句有两大类
- 数值for循环
- 泛型for循环
- 数值for循环,语法
# var从exp1变化到exp2,每次变化以exp3为步长递增var,并执行一次"执行体"。exp3是可选的,如果不指定,默认为1
for var=exp1,exp2,exp3 do
<循环体>
end
for i = 10, 1, -1 do
print(i)
end
--[[
10
9
8
7
6
5
4
3
2
1
]]
for i = 5, 10 do
print(i)
end
--[[
5
6
7
8
9
10
]]
function nn(x)
print("开始执行")
return x*2
end
for i = 1, nn(5), 2 do
print(i)
end
--[[
开始执行
1
3
5
7
9
]]
-
泛型for循环
- 泛型for循环通过一个迭代器函数来遍历所有值,类似python中的迭代器
- 语法
- i是数组索引值,v是对应索引的数组元素值
- ipairs是Lua提供的一个迭代器函数,用来迭代数组
for i, v in ipairs(a)
do
print(v)
end
#!/usr/local/bin/lua
days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
for i, v in ipairs(days) do
print(i .. " : " .. v)
end
--[[
1 : Sunday
2 : Monday
3 : Tuesday
4 : Wednesday
5 : Thursday
6 : Friday
7 : Saturday
]]
- lua中 pairs和ipairs的区别
- 都是遍历集合(表,数组)
- ipairs 仅仅遍历值,按照索引升序遍历,索引中断停止遍历。即不能返回 nil,只能返回数字 0,如果遇到 nil 则退出,它只能遍历到集合中出现的第一个不是整数的 key
- pairs 能遍历集合的所有元素。即 pairs 可以遍历集合中所有的 key,并且除了迭代器本身以及遍历表本身还可以返回 nil
local tabFiles1 = {
[1] = "t1",
[4] = "t4",
[9] = "t9",
[7] = "t7"
}
-- 索引中断停止遍历 只输出 t1
for i, v in ipairs(tabFiles1) do
print(i .. " : " .. v)
end
--[[
1 : t1
]]
for i, v in pairs(tabFiles1) do
print(i .. " : " .. v)
end
--[[
4 : t4
1 : t1
9 : t9
7 : t7
]]
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
local tabFiles2 = {
[2] = "t2",
[6] = "t6",
[4] = "t4"
}
-- 什么都不会打印,因为ipairs采用升序遍历,当i=1时,v=nil,此时便停止遍历
for i, v in ipairs(tabFiles2) do
print(i .. " : " .. v)
end
for i, v in pairs(tabFiles2) do
print(i .. " : " .. v)
end
--[[
4 : t4
2 : t2
6 : t6
]]
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
tabFiles3 = {
"a",
"b",
[3] = "c",
["two"] = "yes"
}
-- 输出前三个参数,第四个key不是整数
for i, v in ipairs(tabFiles3) do
print(i .. " : " .. v)
end
--[[
1 : a
2 : b
3 : c
]]
for i, v in pairs(tabFiles3) do
print(i .. " : " .. v)
end
--[[
1 : a
2 : b
two : yes
3 : c
]]
Lua repeat...until
- repeat...until 循环的条件语句在当前循环结束后判断(意味着要先执行一次)
- 语法
- repeat...until 是条件后行,所以repeat...until 的循环体里面至少要运行一次
- statements(循环体语句) 可以是一条或多条语句,condition(条件) 可以是任意表达式,在 condition(条件) 为 false 时执行循环体语句
- 在condition(条件)为 true 时会跳过当前循环并开始脚本执行紧接着的语句
repeat
statements
until( condition )
repeat
ii = 10
-- 注意 until 条件为true才会退出循环
repeat
print("ii的值:" .. ii)
ii = ii - 1
print(ii <= 1)
until( ii <= 1 )
--[[
ii的值:10
false
ii的值:9
false
ii的值:8
false
ii的值:7
false
ii的值:6
false
ii的值:5
false
ii的值:4
false
ii的值:3
false
ii的值:2
true
]]
控制循环语句
- 循环控制语句用于控制程序的流程, 以实现程序的各种结构方式
- 注意不支持continue关键字退出本次循环
控制语句 描述 break 语句 退出当前循环或语句,并开始脚本执行紧接着的语句 -
break
- Lua 编程语言 break 语句插入在循环体中,用于退出当前循环或语句,并开始脚本执行紧接着的语句
- 如果你使用循环嵌套,break语句将停止最内层循环的执行,并开始执行的外层的循环语句
break
a12 = 10
while (a12 < 20)
do
print("a12的值:", a12)
a12 = a12 + 1
if a12 > 15 then
break -- 终止循环
end
end
--[[
a12的值: 10
a12的值: 11
a12的值: 12
a12的值: 13
a12的值: 14
a12的值: 15
]]
无限循环
- 在循环体中如果条件永远为 true 循环语句就会永远执行下去
while( true )
do
print("循环将永远执行下去")
end