Lua语法基础全面剖析(中篇)

ops/2024/10/31 20:36:47/

接上篇,

今天我们来进行Lua语法全面剖析。

由于篇幅过长,将分为上中下三篇进行讲解,本篇为中篇。

6.字符串

6.1 string 类型变量

字符串(即string),就是一串文本数据,可以存储你要的文本。

在第二节中,print出的数据就是一个字符串。

Lua 语言中字符串可以使用以下三种方式来表示:

  • 单引号间的一串字符

  • 双引号间的一串字符

  • [[和]]间的一串字符

你可以参考下面的例子来深入理解:


--双引号间的一串字符str1 = "Lua"--单引号间的一串字符str2 = 'Lua'--[[和]]--间的一串字符str3 = [[Lua]]str4 = [[使用双括号时,甚至能包含换行数据换行了最后一行]]--输出所有字符串print(str1)print(str2)print(str3)print(str4)

接下来你需要完成下面的练习:

新建三个变量s1、s2、s3

分别存入字符串数据:str、abc、233,使输出打印正确


--请在空白处补全代码print("s1,s2,s3的值:",s1,s2,s3)print("s1,s2,s3的类型:",type(s1),type(s2),type(s3))

6.2 转义字符

在上一节中,我们学习了如何声明字符串。

但是我们有时候会遇到一些特殊的问题,如:如何输出单引号和双引号?如何输出回车换行?

也许我们可以用下面的方式简单规避,输出单引号时,声明字符串用双引号括起来,像下面这样


str = "'"

同理,输出双引号时,声明字符串用单引号括起来,像下面这样


str = '"'

但是,这样会出现一个问题:如何同时显示单引号和双引号?这里就需要转义字符登场了。

转义字符用于表示不能直接显示的字符,比如后退键、回车键、等。

以 \ 开头的都是转义字符,下面时常用的转义字符格式:

转义字符

含义

\n

换行(LF),将当前位置移到下一行开头

\r

回车(CR),将当前位置移到本行开头

\\

反斜杠字符\

\'

单引号

\"

双引号

\0

空字符(NULL)

\ddd

1到3位八进制数所代表的任意字符

\xhh

1到2位十六进制所代表的任意字符

例如,如果我们想给str赋值一个单引号,一个双引号('"),那么我们可以这样写:


str = "\'\""

下面需要你来完成一个简单的任务:

新建一个变量str,给str赋值为

ab\cd"ef'g\h]]

并打印出来


str = --补全代码print(str)--输出应为ab\cd"ef'g\h]]

6.3 string拼接

字符串和字符串可以相加吗?可以!我们可以用拼接符号来将两个独立的字符串拼起来。

我们使用..来表示字符串拼接符号,如下面的示例代码:


print('abc'..'def')str1 = '123'str2 = '999'print(str1..str2)

下面你要完成这个任务:

已知三个字符串变量s1s2s3

请将他们按顺序拼接起来,存入all,并使用print输出结果


s1,s2,s3 = "aaa","bbb","ccc"all = --请补全代码print(all)

6.4 number转string

上面一节学习了如何拼接字符串,这个方法固然很好用,但是有时候我们会遇到一个需求,那就是把number类型的变量和string类型的变量拼接起来,组成一个新的string

比如下面的变量ns,如何拼接起来呢?


n = 123s = 'm/s'

我们可以直接将number类型的变量n转换成string类型的值,这样就可以拼接了

使用tostring(value)函数即可实现这一操作:


n = 123s = 'm/s'result = tostring(n)..sprint(result)

下面你要完成这个任务:

已知三个变量n1sn2

然后将他们按顺序拼接起来,存入变量result,使输出结果正确

小提示:在某些情况下,Lua会自动将number类型转换成string类型


n1,s,n2 = 1,"abc",2result = --请补全代码print(result)


6.5 string转number

上面一节学习了如何将number转成string,这一节我们来学习如何将string转成number

比如下面的变量s,存储的内容是一个字符串,但是代表了一个数字,如何转成number再与n相加计算呢?


n = 123s = '2333'

我们可以直接将string类型的变量s转换成number类型的值,这样就可以计算了

使用tonumber(value)函数即可实现这一操作:


n = 123s = '2333'result = tonumber(s) + nprint(result)

下面你要完成这个任务:

已知三个字符串变量s1s2s3,其内容均为纯数字

请计算他们的算术和,赋值给新建的变量result,使下面代码输出正确结果


s1,s2,s3 = "11","12","100"result = --请补全代码print(result)

7.逻辑运算

7.1 布尔型和比较运算

布尔型(boolean)只有两个可选值:true(真) 和 false(假)

Lua 把 false 和 nil 看作是false,其他的都为true(包括0这个值,也是相当于true)

Lua 中也有许多的关系运算符,用于比较大小或比较是否相等,符号及其含义如下表:

符号

含义

==

等于,检测两个值是否相等,相等返回 true,否则返回 false

~=

不等于,检测两个值是否相等,相等返回 false,否则返回 true

>

大于,如果左边的值大于右边的值,返回 true,否则返回 false

<

小于,如果左边的值大于右边的值,返回 false,否则返回 true

>=

大于等于,如果左边的值大于等于右边的值,返回 true,否则返回 false

<=

小于等于, 如果左边的值小于等于右边的值,返回 true,否则返回 false

我们可以通过以下实例来更加透彻的理解关系运算符的应用:


a = 21b = 10print('==的结果',a==b)print('~=的结果',a~=b)print('>的结果',a>b)print('<的结果',a<b)print('>=的结果',a>=b)print('<=的结果',a<=b)

下面问题来了,运行以下代码,将会输出什么结果?请自行思考


a = 1b = '1'c = ad = 2print(a == b)print(c == a)print(a ~= b)print(d <= c)

7.2 逻辑运算符

逻辑运算符基于布尔型的值来进行计算,并给出结果,下表列出了 Lua 语言中的常用逻辑运算符:

符号

含义

and

逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B

or

逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B

not

逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false

我们可以通过以下实例来更加透彻的理解逻辑运算符的应用:


print('true and false的结果',true and false)print('true or false的结果',true or false)print('true and true的结果',true and true)print('false or false的结果',false or false)print('not false的结果',not false)print('123 and 345的结果',123 and 345)print('nil and true的结果',nil and true)

下面问题来了,运行以下代码,将会输出什么结果?


a = 1b = '1'c = 0print(a and b)print(c or a)print(not b)print(d and c)print(1 < 2 and 3 > 2)

7.3 检验大小(自测题)

题目:如果已知number变量n,那么如果需要判断n是否符合下面的条件:

3<n≤10

以下四行判断代码,正确的是?

(返回true即表示变量n符合要求)

 

n = 1--这个数可能是任意数字

print(n > 10 or n <= 3)

print(n <= 10 or n > 3)

print(n < 3 and n >= 10)

print(n <= 10 or n > 3)

8.分支判断

8.1 条件判断

上面一节学习了布尔类型,那么这个需要用到哪里呢?我们需要用它来进行某些判断。

在Lua中,可以使用if语句来进行判断,如下面所举例的代码,可以判断n是否为小于10的数:


n = 5if n < 10 thenprint('n小于10')end

我们整理一下,实际上if语句就是如下结构:


if 条件 then符合条件的代码end

下面是你需要完成的事:

已知变量n,请判断n是否为奇数,如果是,请给n的值加上1

如果你觉得有难度,请查看下面的提示:

  • 求出n除以2的余数:n % 2

  • n的值加上1:n = n + 1


--已知一个number变量nn = 5   --这个数字是几都有可能print("n在判断前的值",n)if 你的条件 then要做的事endprint("n在判断后的值",n)

8.2 多条件判断

上面一节学习了简单的if语句写法,这一节我们来学习多条件分支语句

在Lua中,可以使用if语句来进行判断,同时可以使用else语句,表示多个分支判断


if 条件1 then满足条件1elseif 条件2 then不满足条件1,但是满足条件2else前面条件全都不满足end

举个例子,比如有一个数字n

  • 当它大于等于0、小于5时,输出太小

  • 当它大于等于5、小于10时,输出适中

  • 当它大于等于10时,输出太大

那么代码就像如下这样:


n = 1--更改这个数多运行几次试试if n >= 0 and n < 5 thenprint('太小')elseif n >= 5 and n < 10 thenprint('适中')elseif n >= 10 thenprint('太大')end

注意:else和elseif都是可选的,可有可无,但是end不能省略

下面是你需要完成的事:

已知变量n,请判断n是否为奇数,

  • 如果是,请给n的值加上1

  • 如果不是,请将n的值改为原来的两倍


--已知一个number变量nn = 5   --这个数字是几都有可能print("n在判断前的值",n)if 你的条件 then要做的事else要做的事endprint("n在判断后的值",n)

8.3 判断三角形合法性(自测题)

你需要使用前面几章的知识,来完成下面的题目

已知三个number类型的变量a、b、c,分别代表三根木棒的长度

请判断,使用这三根木棒,是否可以组成一个三角形(两短边之和大于第三边)

  • 如果可以组成,就打印出true

  • 如果不可以,就打印false


a,b,c = 1,2,3--多改几个数值自行测试--补全代码

8.4 if的判断依据(自测题)

我们在前面了解到,Lua 把 false 和 nil 看作是false,其他的都为true(包括0这个值,也是相当于true)

那么问题来了,执行下面的代码,将会输出什么?

result = ''if 0 thenresult = result..'T,'elseresult = result..'F,'endif a thenresult = result..'T'elseresult = result..'F'endprint(result)

关注博主,陆续发布下篇


http://www.ppmy.cn/ops/129946.html

相关文章

前端代码注释

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言类注释属性注释函数注释函数参数注释解构 & 函数返回结果 注释Vue Props 注释注释建议注释内容要清晰简洁注释类型避免不必要的注释采用一致的风格版本与更…

PHP+REDIS设置请求限流(设置1秒内最大请求数1000QPS)

双十一期间要做活动&#xff0c;设置商品请求限流&#xff0c;护航秒杀活动正常进行&#xff01;#设置1秒内最多同时1000请求 $maxNum 1000; $redisKey GoldMall:Huodong:gid.$g_id._.date(s); $onlineNum (int)$this->redis->get($redisKey); if($onlineNum){$online…

ToDesk远程连接Ubuntu无法载入桌面

仅用于记录自己解决Ubuntu下ToDesk无法打开桌面。 问题描述 Ubuntu的ToDesk可以远程其他设备&#xff0c;一切正常&#xff1b; 其他设备远程Ubuntu时&#xff0c;卡在“正在链接100%”界面&#xff0c;但无法显示。 除此之外&#xff0c;Ubuntu下打开ToDesk客户端&#xff…

算法的基本概念@性能分析初步@复杂度分析初步

文章目录 abstract算法的基本概念算法指标 算法的效率问题规模(输入规模)语句频度 复杂度频度例输入数据状态 算法的时间复杂度&#x1f47a;定义基本语句渐进性能符号O和渐进时间复杂度 数量级严格定义符号O理解符号O 相关描述分析算法时间复杂度的基本方法&#x1f47a;对于给…

光伏如何避免阴影遮挡?气象仿真+方案设计更准确!

不合理的阴影遮挡对光伏组件的影响不容忽视。它不仅会导致光伏组件的输出功率下降&#xff0c;影响整体发电效率。更为严重的是&#xff0c;阴影遮挡还可能引发光伏组件的局部过热现象&#xff0c;形成所谓的“热斑效应”。 “热斑效应”是指阴影效应持续存在且未得到有效消除&…

【C++刷题】力扣-#495-提莫攻击

题目描述 在《英雄联盟》的世界中&#xff0c;有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希&#xff08;编者注&#xff1a;寒冰射手&#xff09;进入中毒状态。 当提莫攻击艾希&#xff0c;艾希的中毒状态正好持续 duration 秒。 正式地讲&#xff0c;提莫在 t 发起…

守护头顶安全——AI高空抛物监测,让悲剧不再重演

在城市的喧嚣中&#xff0c;我们享受着高楼林立带来的便捷与繁华&#xff0c;却往往忽视了那些隐藏在高空中的危险。近日&#xff0c;震惊全国的高空抛物死刑案件被最高院核准并执行。案件中被告人多次高空抛物的举动&#xff0c;夺去了无辜者的生命&#xff0c;也让自己付出了…

2024年10月23日Github流行趋势

项目名称&#xff1a;hiteshchoudhary / apihub 项目维护者&#xff1a;wajeshubham, atulbhatt-system32, jwala-anirudh, arnb-smnta, shrey-dadhaniya 项目介绍&#xff1a;您自己的API Hub&#xff0c;用于学习和掌握API交互。非常适合前端、移动开发人员和后端开发人员。 …