条件语句if
if then
end
local a = 2
if a < 6 thenprint(a)
end
2
条件语句if else
if then
else
end
local a = 2
local b = 3
if a > 6 thenprint(a)
elseprint(b)
end
3
while循环语句
while do
end
local a = 2
while a < 5 doa = a + 1print(a)
end
3
4
5
for循环语句
for do
end
for a = 1,10,3 doprint(a)
end
1
4
7
10
repeat循环语句
repeat
until
local a = 2
repeat a = a + 1print(a)
until a > 5
3
4
5
6
文本格式化
string.format
local a = 2
local b = 3
--local c = a.."*"..b.."="..(a * b)
local c = string.format("%d*%d=%d", a, b, a*b)
print(c)
2*3=6
循环控制 break/goto
1、跳出整个循环
break--结束
for a = 1,5 doif a == 3 thenbreakendprint(a)
end
1
2
2、跳出本次循环
goto--跳转到后面代号处
for a = 1,5 doif a == 3 thengoto abcendprint(a)::abc::
end
1
2
4
5
嵌套循环
for a = 1,9 dofor b = 1,a doio.write(string.format("%d*%d=%d ", a, b, a*b))endio.write("\n")
end
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
函数定义、调用
function
end
function say()print("say内容1")print("say内容2")
end
--不会输出,需要调用(让函数执行)
say()--调用
say()
say内容1
say内容2
say内容1
say内容2
函数参数
function
end
--参数(输入):函数执行之前的已知条件,给函数传递的数据
--返回值(输出):函数执行之后带回来的结果
function say(name)--()内叫参数列表print("你好,"..name.."博士")
end
say("大")
你好,大博士
return函数返回值
return--中止当前函数
function say(name)return("你好,"..name.."博士")--return后不能加东西,会报错
end
local a = say("小")
print (a)
你好,小博士
函数参数、返回值
function say(a,b)--多个参数以逗号分隔return a*b
end
local c = say(2,3)
local d = say(10,3)
print(c,d)
6 30
--[[使用print(a, b)这样的方式输出多个参数时,参数之间会自动用制表符(tab)分隔,而不是简单的空格。
这是Lua的print函数默认行为,它会自动在每个参数之间插入一个制表符(ASCII码为9)作为分隔符]]
函数计算斜边
math.sqrt--开平方
function hello(a,b)--直角三角形的两个边长度a,b,计算斜边local c = a*a+b*blocal d = math.sqrt(c)--开平方print(d)--return math.sqrt(a*a + b*b)--省两行
endhello(3,4)
--print(hello(3,4))
5.0
随机数
math.random--生成随机伪随机数
local num0 = 0
local num1 = 0
local num2 = 0
local num3 = 0
num0 = math.random()--生成0≤num<1的浮点伪随机数
num1 = math.random(5)--生成1≤num≤5的整数伪随机数
num2 = math.random(1,10)--生成1≤num≤10的整数伪随机数
num3 = math.random() * 50--生成0≤num<50的浮点伪随机数
print(num0)
print(num1)
print(num2)
print(num3)
0.84963174875401
5
1
31.14195529442
随机数种子
math.randomseed--设置随机数种子
math.randomseed(12345)--设置随机数种子
--math.randomseed(os.time)--使用当前时间(精确到秒)作为种子
--需要毫秒级的需要看平台接口
for i = 1 , 5 doprint(math.random())--打印5个随机数
end
--第一次输出
0.87460442174732
0.40364110609593
0.66623531969836
0.25568534734156
0.74194905034451
--清除后第二次输出
0.87460442174732
0.40364110609593
0.66623531969836
0.25568534734156
0.74194905034451
计算暴击伤害
function crit(val,bj)--val 伤害 ,bj 暴击率if math.random() < bj then--判断是否暴击return val * 2--暴击伤害增加2倍endreturn val
endlocal a = 100--基础伤害
local b = 0.2--暴击率for d = 1,5,1 dolocal c = crit(a,b)print("最终伤害:"..c)
end
最终伤害:200
最终伤害:200
最终伤害:100
最终伤害:100
最终伤害:200
函数多个返回值
function swap(a, b)return b, a
endlocal x, y = swap(1,2)
print(x, y)
2 1
function swap()return 2, 3
endlocal x, y = swap()
print(x, y)
2 3
函数不固定参数
function hello(...)--代表不固定有几个参数
function swap(...)for _, v in ipairs({...}) do--传进来的参数一个一个单独循环处理print("参数:" .. v)end
endswap(1, 2, 3, 7)--参数类型都支持的
swap("ha", "he")
```lua
参数:1
参数:2
参数:3
参数:7
参数:ha
参数:he
循环、遍历、迭代
循环(looping):重复执行某段代码,多次执行代码直到满足某个条件,常见循环结构(for、while、do while)
遍历(traversal):逐个访问一遍
迭代(iteration):一种特殊的遍历方式,在数组、列表、集合等中逐个访问元素(强调过程)
迭代----(过程)----》遍历----(原理)----》循环
获取当前文件目录
function hello(...)--代表不固定有几个参数
function swap(...)for _, v in ipairs({...}) do--传进来的参数一个一个单独循环处理print("参数:" .. v)end
endswap(1, 2, 3, 7)--参数类型都支持的
swap("ha", "he")
```lua
参数:1
参数:2
参数:3
参数:7
参数:ha
参数:he