循环与选择

Lua提供以下类型的循环来处理循环需求。


编号


循环类型


描述


1


while循环


在给定条件为真时重复语句或语句组,它在执行循环体之前测试条件。


2


for循环


多次执行一系列语句,并缩写管理循环变量的代码。


3


repeat…unti循环


重复语句组的操作,直到满足until条件。


4


嵌套循环


可在任何循环中使用另一个或多个循环,如:while,fordo..while循环。

循环控制声明

循环控制语句从正常顺序改变执行。 当执行离开作用域时,将销毁在该作用域中创建的所有自动对象。

Lua支持以下控制语句。


编号


控制语句


描述


1


break语句


终止循环并将执行转移到循环或switch之后的语句。

无限循环

如果条件永远不会变为假,则循环变为无限循环。 while循环通常用于此目的。如果直接给出了一个条件为真,它就会永远执行。可以使用break语句来打断这个无限循环。

while( true )do
   print("This loop will run forever.")end

Lua编程语言假定布尔truenon-nil值的任意组合为true,如果它是布尔falsenil,则假定为false值。 需要注意的是,在Lua中,零将被视为true

Lua编程语言提供以下类型的决策制定语句 -


编号


决策语句


描述


1


if语句


if语句由布尔表达式后跟一个或多个语句组成。


2


if…else语句


if语句后面可以跟一个可选的else语句,该语句在布尔表达式为false时执行。


3


嵌套if语句


在一个ifelse if语句中使用另一个ifelse if语句。

Lua中的控制结构

Lua提供了一组传统的、小巧的控制结构,包括用于条件执行的if,用于迭代的while、repeat和for。所有的控制结构都有意个显式的终止符:if、for和while以end作为结尾,repeat以until作为结尾。
1. if then else

if a < 0 then a = 0 end
if a < b then return a else return b end
if line > MAXLINES then
    showpage()
    line = 0end

若要编写嵌套的if,可以使用elseif。

if op == "+" then
    r = a + b elseif op == "-" then
    r = a - b elseif op == "*" then
    r = a * b elseif op == "/" then
    r = a / b else
    error("invalid operation")end

由于Lua不支持switch语句,所以这种一连串的if-else if代码很常见。

2. while
Lua先测试while的条件。如果条件为假,那么循环结束;不然,Lua执行循环体,并重复这一过程。

local i = 1 while a[i] do
    print(a[i])
    i = i + 1 end

3. repeat
一条repeat-until语句重复执行其循环体直到条件为真时结束。测试是在循环体之后做的,因此循环体至少会执行一次。

-- 打印输入的第一行不为空的内容repeat
    line = io.read()until line ~= ""print (line)

与其他大多数语言不同的是,在Lua中,一个声明在循环体中的局部变量的作用于包括了条件测试:

local sqr = x/2repeat
    sqr = (sqr + x/sqr)/2
    local error = math.abs(sqr^2 - x)until error < x/10000       -- 在此仍可访问error

4. 数字型fornumeric for
for循环有两种形式:数字型for(numeric for)和泛型for(generic for)。
数字型for的语法如下:

for var=exp1,exp2,exp3 do
    <执行体>end

var从exp1变化到exp2,每次变化都以exp3作为步长(step)递增var,并执行一次“执行体”。第三个表达式exp3是可选的,若不指定的话,Lua会将步长默认为1。以下是这种循环的一个典型示例:

for i=1,f(x) do print(i) endfor i=10,1,-1 do print(i) end

如果不想给循环设置上限的话,可以使用常量math.huge:

for i=1,math.huge do
    if (0.3*i^3 - 20*i^2 - 500 >= 0) then
        print(i)
        break
    End end

5.泛型forgeneric for
泛型for循环通过一个迭代器(iterator)函数来遍历所有值:

-- 打印数组a的所有值for i,v in ipairs(a) do print(v) end

Lua的基础库提供了ipairs,这时一个用于遍历数组的迭代其函数。在每次循环中,i会被赋予一个索引值,同时v被赋予一个对应于该索引的数组元素值。下面是另一个类似的示例,演示了如何遍历一个table中所有的key:

-- 打印table t中所有的keyfor k in pairs(t) do print(k) end

标准库提供了几种迭代器,包括:
    用于迭代文件中每行的(io.lines);
    迭代table元素的(pairs);
    迭代数组元素的(ipairs);
    迭代字符串中单词的(string.gmatch)等

Lua 编程语言中 for 循环语句可以重复执行指定语句,重复次数可在
for 语句中控制。

Lua 编程语言中 for语句有两大类:数值for循环,  泛型for循环

数值for循环

for var=exp1,exp2,exp3 do

<执行体>

end

var从exp1变化到exp2,每次变化以exp3为步长递增var,并执行一次"执行体"。exp3是可选的,如果不指定,默认为1。

实例

for i=1,f(x) do

print(i)

end

for i=10,1,-1 do

print(i)

end

for的三个表达式在循环开始前一次性求值,以后不再进行求值。比如上面的f(x)只会在循环开始前执行一次,其结果用在后面的循环中。

验证如下:

#!/usr/local/bin/lua

function f(x)

print("function")

return x*2

end

for i=1,f(5) do print(i)

end

以上实例输出结果为:

function

1

2

3

4

5

6

7

8

9

10

泛型for循环

泛型for循环通过一个迭代器函数来遍历所有值,类似java中的foreach语句。Lua 编程语言中泛型for循环语法格式:

--打印数组a的所有值

for i,v in ipairs(a)

do print(v)

end

i是数组索引值,v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组。

实例

#!/usr/local/bin/lua

days = {"Suanday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}

for i,v in ipairs(days) do  print(v) end

以上实例输出结果为:

Suanday

Monday

Tuesday

Wednesday

Thursday

Friday

Saturday

原文地址:https://www.cnblogs.com/gd-luojialin/p/10962729.html

时间: 2024-11-04 07:50:16

循环与选择的相关文章

bash编程语法总结,顺序,循环,选择

bash编程语法     首先,我们先说下bash语法都有哪些内容,随后我会随后一一去分析,加强我记忆的同时也分享下给家. linux bash脚本的基本内容构架如下: #!/bin/bash   -----> 每个bash脚本第一行必须要写的,告诉系统这是个bash脚本. #              -----> #为注释的标志符号,#开头的行都是脚本不执行的,仅用作注释 命令段     -----> 脚本要执行的具体命令,来完成相应的功能 bash编程为过程式编程语言,有3种主要语

循环和选择

3-1 IF判断 作用:流程控制,属于流程控制语句 流程控制 if判断 switch选择 循环 判断的条件是bool类型 else if 可以有任意个,并且可以省略else 3-2  switch选择 语法如下: switch(变量或表达式) { case 值1: 代码1; break; case 值2: 代码2; break; default: 代码N; break; } ps:每个分支后必须跟break,值必须集体,不能是变量和表达式,case可以任意个,default只有1个或0个. 3-

java入门学习(3)&mdash;循环,选择,基础算法,API概念

1.顺序结构:也就是顺着程序的前后关系,依次执行.2.选择分支:利用if..else , / switch(){case [ 这个必须是常量]:}; / if..else if-.. -.else..等语句让程序在不同的分支中切换执行.3.循环结构:重复执行完成功能,可以用while(){}(先判断再执行):do{}while():(先执行后判断): for(初始值:结束条件:循环控制变量): 注:其中循环可以嵌套,嵌套的时候先判断外层循环是否满足,然后再进入内层循环,执行完内层循环管,一直到条

循环窗体选择 测试数据库数据是否正确

private void button1_Click_1(object sender, EventArgs e) { for (int x = 0; x < 36; x++) { DI = DI + 100; for (int i = 0; i < cbType.Items.Count; i++) { cbType.SelectedIndex = i; for (int j = 0; j < TopPlateList.Count; j++) { cbbHasCover.Enabled =

循环、选择要注意的复合语句

if.else.else if.do...while.while.for.函数的定义.结构体.链表.枚举等都会用到复合语句.复合语句指多条语句用"{"和"}"括起来,执行时要么都执行,要么都不执行.而if.else.else if.do...while.while.for语句如果后面没有复合语句,则默认与它紧挨的一条语句为该语句块.有无复合语句的代码执行结果是不一样的. 原文地址:https://www.cnblogs.com/nylglqx/p/9696386.h

黑马程序员— C语言选择结构和循环结构的总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 在学习完C语言的流程控制后,发现选择结构跟循环结构都各自有各自的特点,下面就来对选择结构与循环结构进行一个综合的总结 第一讲  选择结构与循环结构 选择结构主要包括if语句和switch语句,而循环结构包括for循环,while循环以及do while循环: 一 选择结构 1.if(条件){ }else if(条件2){ }else{ } 特点:同一时刻只有一个大括号里面的代码会执行. 2.s

python 2 数据类型, 序列,运算, 缩进和选择, 循环,函数

ref:作者:Vamei 出处:http://www.cnblogs.com/vamei 1. 变量不需要声明 >>> a = 10 >>> print a >>> print type(a) out: 10 <type 'int'> 2. 回收变量名 如果你想让变量存储不同的数据,直接从新赋值就可以 >>> a = 1.3 // 将一个double 赋值给a, 在这之前 a 是int >>> print

react 使用antd的TreeSelect树选择组件实现多个树选择循环

需求说明,一个帐号角色可以设置管理多个项目的菜单权限 且菜单接口每次只能查询特定项目的菜单数据[无法查全部] 开发思路: 1,获取项目接口数组,得到项目数据 2,循环项目数据,以此为参数递归查询菜单数据[递归查询是为保证循环时数据异步请求顺序 不稳定] 3,将菜单数组组装成一个二维数组,以待循环树选择组件作展示 数据使用 4,循环树选择组件,实现树选择菜单功能 5,读取某条用户信息的菜单权限,将返回字符串菜单编码处理成与菜单数据相同的二维数组 6,奖该用户信息的菜单权限数组加载到循环树选择组件作

选择排序和插入排序

选择排序思想是:假设一组混乱数组中一个数字是排好序的,然后对其他数字逐个排序,注意他与插入排序本质区别是,选择排序没有提前退出一说,也就是说必须要全部遍历完的,而插入排序可以提前退出循环 下面选择排序代码: let select = (arr) => { for (var i = 0; i < arr.length;i++) { for (var j = i+1; j< arr.length;j++) { if (arr[j] < arr[i]) { swap(arr, j, i)