循环

作者: 爱折腾的傻小子 | 来源:发表于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