循环

作者: 爱折腾的傻小子 | 来源:发表于2021-01-04 09:50 被阅读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

相关文章

网友评论

      本文标题:循环

      本文链接:https://www.haomeiwen.com/subject/owjhoktx.html