美文网首页Lua教程
Lua极简入门(五)——循环

Lua极简入门(五)——循环

作者: 李小磊_0867 | 来源:发表于2019-10-20 18:46 被阅读0次

在编写代码的过程中,总有许多迭代的代码需求,如计算从1连加到10的计算,如果数字足够大,使用表达式计算的方法,将无法胜任,我们不可能花费一下午去写一个累加表达式。此时可以借助Lua提供的迭代控制实现,迭代控制主要包含whileforrepeat三种。whileforend作为显示结尾符;repeatuntil作为结尾。

其中for 又分为 数值型for泛型for 两种。

while

java一致,while控制先检查条件,当条件满足时,将一直循环执行表达式,当条件不满足时,退出循环。比如计算高斯算法,从1累加到100,使用while实现如下:

sum = 0
n = 1
while n <= 100 do
    sum = sum + n
    n = n + 1
end

print(sum)
-->> 5050

repeat

repeat...until直观意思为重复...直到。那么该控制语句会不断重复repeat语句,直到until判断条件为true时,终止循环。until条件判断在repeat循环体之后,因此同while一致,循环体至少执行一次。

采用repeat...until控制语句实现高斯算法:

sum = 0
n = 1
repeat
    sum = sum + n
    n = n + 1
until n > 100

print(sum)
-->> 5050

如收集用户输入,直到用户输入exit时,终止输入:

input = ""
repeat
    input = io.read()
    print(input)
until input == "exit"
-->> hello  -- 输入
-->> hello  -- 输出
-->> lua    -- 输入
-->> lua    -- 输出
-->> exit   -- 输入
-->> exit   -- 输出,程序结束

for(number)

数值型for语法如下所示

for n = init, target, step do
    <执行语句>
end    

含义为:当变量n从初始值init,改变到target,每次的步长为step,对n进行递增,并且每次递增都执行循环体<执行语句>。其中步长step可以省略,将缺省时,默认步长为1

使用for计算高斯算法

sum = 0
for i = 1, 100, 1 do
    sum = sum + i
end
print(sum)
-->> 5050
sum = 0
for i = 1, 100 do
    sum = sum + i
end
print(sum)
-->> 5050
sum = 0
for i = 100, 1, -1 do
    sum = sum + i
end
print(sum)
-->> 5050

for语句中,控制变量i为局部变量,在for循环体外,将无法访问,如果要在循环之后,访问控制变量的值,需要设置其他变量用以保存该控制变量。

如找到第一个考试不及格的学生位置:

a = {99, 87, 69, 55}
position = -1
for i = 1, #a do
    if a[i] < 60 then
        position = i
        break
    end
end

print(position)
-->> 4

for(泛型)

泛型for循环,通过迭代器函数遍历所有值,内置的迭代器也是编码中常用的几种迭代器如下:

  • 文件迭代器io.lines,用于循环一个文件内的行信息

    按行读取文件,并处理每行信息

    for v in io.lines("C:\\a.txt") do
        print(v)
    end
    -- a.txt每行一个字母
    -->> a
    -->> b
    -->> c
    
  • table元素迭代器pairs

    pairs迭代器,可适用于table,同时也可以适用于数组,但反之不行。

    a = {name = "lua", version = "5.3"}
    for i, v in pairs(a) do
       print(i, v)
    end
    -->> version  5.3
    -->> name lua
    b = {98, 77, 56}
    for i, v in pairs(b) do
        print(i, v)
    end
    -->> 1    98
    -->> 2    77
    -->> 3    56
    

    pairs迭代是,i将会被赋予索引值或key,v将会被赋予元素值。如可以采用pairs进行遍历table的所有key:

    a = {name = "lua", version = "5.3"}
    for i in pairs(a) do
       print(i)
    end
    -->> version
    -->> name
    
  • 数组元素迭代器ipairs

    ipairs可用于迭代数组,不能迭代table,在迭代过程中,i被赋予数组的索引值,v被赋予索引位置的元素值。

    b = {98, 77, 56}
    for i, v in ipairs(b) do
        print(i, v)
    end
    -->> 1    98
    -->> 2    77
    -->> 3    56
    

    当使用数组迭代器ipairs迭代table时,其表现如下

    a = {name = "lua", version = "5.3"}
    for i, v in ipairs(a) do
        print(i, v)
    end
    -- 无输出,无法迭代
    

相关文章

  • Lua极简入门(五)——循环

    在编写代码的过程中,总有许多迭代的代码需求,如计算从1连加到10的计算,如果数字足够大,使用表达式计算的方法,将无...

  • Lua极简入门(六)——函数

    在完成一些编码工作时,总会有一些相似或者重复的工作。比如在结算工资时,员工的工资不同,但缴纳税、社保等计算是一个相...

  • Lua极简入门(二)——基础

    lua不需要使用;分割语句,但使用了;进行分割语句,也是合法的。一般情况下,一行代码表示一个语句,当行内出现多个语...

  • Lua极简入门——类型(一)

    nil 该类型,只有一个值nil,主要用于区分其他任何值,它代表了没有任何有效值。当一个变量第一次赋值前,默认为n...

  • Lua极简入门——类型(二)

    string 字符串标识一个字符序列,采用8位编码。Lua字符串是不可变的值,创建后不能再修改内部字符,如果要进行...

  • Lua极简入门(一)——Lua开发环境搭建

    进入 Lua官方下载 页面下载相应版本 将下载的压缩包(lua-5.3.5_Win64_bin.zip)解压到C:...

  • Lua极简入门——类型(三)table

    table实现了关联数组,是一种具有特殊索引方式的数组。其具体特点以及使用特性如下。 可以使用整数索引值进行索引,...

  • Lua极简入门(六)——函数定义

    对于Lua,定义个函数,非常简单。只需要使用function语句,接下来需要明确函数名、括号,参数列表,最后以en...

  • Lua极简入门(四)——条件判断

    表达式 表达式是条件判断的基础,Lua的表达式同其他语言类似,只是表示方式上有一些变化。其表达式主要分为如下几种 ...

  • Lua极简入门(十)——面向对象

    在介绍完Lua的基础知识包括元表,函数式编程之后,终于到了Lua面向对象编程。虽然并不打算使用Lua进行大型应用系...

网友评论

    本文标题:Lua极简入门(五)——循环

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