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

接上篇,

今天我们来进行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,使输出打印正确

cpp 复制代码
--请在空白处补全代码

print("s1,s2,s3的值:",s1,s2,s3)

print("s1,s2,s3的类型:",type(s1),type(s2),type(s3))

6.2 转义字符

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

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

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

cpp 复制代码
str = "'"

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

cpp 复制代码
str = '"'

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

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

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

|----------|---------------------|
| 转义字符 | 含义 |
| \n | 换行(LF),将当前位置移到下一行开头 |
| \r | 回车(CR),将当前位置移到本行开头 |
| \\ | 反斜杠字符\ |
| \' | 单引号 |
| \" | 双引号 |
| \0 | 空字符(NULL) |
| \ddd | 1到3位八进制数所代表的任意字符 |
| \xhh | 1到2位十六进制所代表的任意字符 |

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

cpp 复制代码
str = "\'\""

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

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

ab\cd"ef'g\h]]

并打印出来

cpp 复制代码
str = --补全代码

print(str)

--输出应为ab\cd"ef'g\h]]

6.3 string拼接

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

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

cpp 复制代码
print('abc'..'def')

str1 = '123'

str2 = '999'

print(str1..str2)

下面你要完成这个任务:

已知三个字符串变量s1s2s3

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

cpp 复制代码
s1,s2,s3 = "aaa","bbb","ccc"

all = --请补全代码

print(all)

6.4 number转string

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

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

cpp 复制代码
n = 123

s = 'm/s'

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

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

cpp 复制代码
n = 123

s = 'm/s'

result = tostring(n)..s

print(result)

下面你要完成这个任务:

已知三个变量n1sn2

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

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

cpp 复制代码
n1,s,n2 = 1,"abc",2

result = --请补全代码

print(result)

6.5 string转number

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

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

cpp 复制代码
n = 123

s = '2333'

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

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

cpp 复制代码
n = 123

s = '2333'

result = tonumber(s) + n

print(result)

下面你要完成这个任务:

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

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

cpp 复制代码
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 |

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

cpp 复制代码
a = 21

b = 10

print('==的结果',a==b)

print('~=的结果',a~=b)

print('>的结果',a>b)

print('<的结果',a<b)

print('>=的结果',a>=b)

print('<=的结果',a<=b)

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

cpp 复制代码
a = 1

b = '1'

c = a

d = 2

print(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 |

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

cpp 复制代码
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)

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

cpp 复制代码
a = 1

b = '1'

c = 0

print(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的数:

cpp 复制代码
n = 5

if n < 10 then

   print('n小于10')

end

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

cpp 复制代码
if 条件 then

   符合条件的代码

end

下面是你需要完成的事:

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

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

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

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

cpp 复制代码
--已知一个number变量n

n = 5   --这个数字是几都有可能

print("n在判断前的值",n)

if 你的条件 then

   要做的事

end

print("n在判断后的值",n)

8.2 多条件判断

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

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

cpp 复制代码
if 条件1 then

   满足条件1

elseif 条件2 then

   不满足条件1,但是满足条件2

else

   前面条件全都不满足

end

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

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

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

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

那么代码就像如下这样:

cpp 复制代码
n = 1--更改这个数多运行几次试试

if n >= 0 and n < 5 then

   print('太小')

elseif n >= 5 and n < 10 then

   print('适中')

elseif n >= 10 then

   print('太大')

end

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

下面是你需要完成的事:

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

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

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

cpp 复制代码
--已知一个number变量n

n = 5   --这个数字是几都有可能

print("n在判断前的值",n)

if 你的条件 then

   要做的事

else

   要做的事

end

print("n在判断后的值",n)

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

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

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

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

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

  • 如果不可以,就打印false

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

--补全代码

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

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

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

cpp 复制代码
result = ''

if 0 then

    result = result..'T,'

else

    result = result..'F,'

end

if a then

    result = result..'T'

else

    result = result..'F'

end

print(result)

关注博主,陆续发布下篇

相关推荐
洪大宇11 分钟前
Vuestic 整理使用
开发语言·javascript·ecmascript
WangMing_X13 分钟前
C# 单个函数实现各进制数间转换
java·开发语言·算法·c#·winform·软件
墨染新瑞23 分钟前
C语言——八股文(笔试面试题)
c语言·开发语言
sheng12345678rui32 分钟前
mfc100.dll丢失的解决方法-电脑基础知识
数据库·microsoft·电脑·dll修复工具·1024程序员节
好青崧40 分钟前
JavaScript 循环与条件判断
开发语言·javascript·udp
进步哥44 分钟前
python之爬虫遇到返回内容乱码
开发语言·爬虫·python
manhuami20071 小时前
51单片机ALE引脚的作用 - 锁存地址和输出时钟信号并不冲突
单片机·嵌入式硬件·51单片机
搬砖的小码农_Sky1 小时前
单片机如何入门?
单片机·嵌入式硬件
只看见而已1 小时前
锁升级及线程池相关
java·开发语言
Q23553688721 小时前
60V恒流IC SL8443B内置功率MOS 支持2.5A电流 降压LED恒流驱动芯片
单片机·嵌入式硬件