chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

條理清晰,淺顯易懂:Lua語法基礎知識(第二部分)

青山老竹農 ? 來源:jf_82863998 ? 作者:jf_82863998 ? 2024-10-29 13:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天我們繼續(xù)學習Lua語法基礎教程,中篇。

五、變量

5.1 number變量

變量,可以看作是一個桶,在里面裝你想要裝的內容。這些內容可以是Lua包含的所有合法類型。

例如:我想要新建一個桶,名叫bucket,在里面放入233這個數(shù)字,就可以像下面一樣:

bucket = 233

讓我們試著自己新建幾個變量吧!

  • 新建變量year,并將變量的值設置為1926
  • 新建變量month,并將變量的值設置為8
  • 新建變量day,并將變量的值設置為7

--新建三個變量,并賦值

year = 1926

month = 8

day = 7

--打印出三個變量的值

print(year,month,day)

5.2 了解nil

nil類型表示沒有任何有效值,只要是沒有聲明的值,它就是nil

比如我打印一個沒有聲明的值,便會輸出nil:

ccc = 233

print(ccc)

print(aaa)

這里需要你思考一下,運行以下代碼,將會輸出什么結果?

a = 1

b = '2'

c = a

print(a,b,c,d)

5.3 賦值語句

賦值是改變一個變量值的最基本的方法。

如下面一樣,使用等號對左邊的變量進行賦值

n = 2

n = 3

n = n + 1

b = n

Lua可以對多個變量同時賦值,變量用逗號分開,賦值語句右邊的值會依次賦給左邊的變量。

n = 1

a, b = 10, 2*n

當左右值的數(shù)量不一致時,Lua會進行下面的設定:

  • 變量個數(shù) > 值的個數(shù):按變量個數(shù)補足nil
  • 變量個數(shù) < 值的個數(shù):多余的值會被忽略

下面的例子可以展示這種設定:

a, b, c = 0, 1

print(a,b,c)

--輸出0 1 nil

a, b = a+1, b+1, b+2

print(a,b)

--輸出1 2

a, b, c = 0

print(a,b,c)

--輸出0 nil nil

這里需要你思考一下,運行以下代碼,將會輸出什么結果?


a,b,c = 1,2,3

a,c = a+1,b

d = c,b

print(a,b,c,d)

5.4 交換變量

這部分需要你自己完成一個任務:

已知下面的代碼,并且已知ab的值,請在交換他們的值,使打印輸出12 34


a = 34

b = 12

--你需要在這里進行交換變量的操作

--提示:新建一個變量來存放臨時的值

print(a,b)

5.5 輸出變量

我們已經知道了,在Lua中,可以使用print函數(shù)來打印你想要得到的結果。

同時在上一節(jié),我們學會了新建變量和設置變量的值。

讓我們試著輸出某個變量吧!使用print函數(shù),輸出已知變量。 我們已知變量num為某個數(shù)字,試著輸出它的值吧!


num = 123

--請補全代碼,輸出num的值

print(你要在這里填東西)

5.6 算數(shù)運算符

運算符是一個特殊的符號,用于告訴解釋器執(zhí)行特定的數(shù)學或邏輯運算。

上一節(jié)中,新建的數(shù)字變量,我們稱之為number類型的變量。

本節(jié)我們來學習使用算術運算符,如下所示:


  • 加法
  • 減法
  • 乘法

/ 除法

% 取余,求出除法的余數(shù)

^ 乘冪,計算次方

  • 負號,取負值

我們可以通過以下實例來理解算術運算符的應用:


a = 21

b = 10

c = a + b

print('a + b 的值為 ', c )

c = a - b

print('a - b 的值為 ', c )

c = a * b

print('a * b 的值為 ', c )

c = a / b

print('a / b 的值為 ', c )

c = a % b

print('a % b 的值為 ', c )

c = a^2

print('a^2 的值為 ', c )

c = -a

print('-a 的值為 ', c )

c = a * (b - a)

print('a * (b - a) 的值為 ', c )

你需要完成下面的任務:

已知,一個長方體的長寬高分別為a、b、c(單位米),且這個物體重量為m(單位克)

請打印出物體的密度(單位g/m3)

注:密度計算公式 密度 = 質量 / 體積


a,b,c = 1,2,3 --長寬高

m = 10 --重量

--請打印出物體的密度

六、字符串

6.1 string 類型變量

字符串(即string),就是一串文本數(shù)據(jù),可以存儲你要的文本。

在第二節(jié)中,print出的數(shù)據(jù)就是一個字符串。

Lua 語言中字符串可以使用以下三種方式來表示:

  • 單引號間的一串字符
  • 雙引號間的一串字符
  • [[和]]間的一串字符

你可以參考下面的例子來深入理解:


--雙引號間的一串字符

str1 = "Lua"

--單引號間的一串字符

str2 = 'Lua'

--[[和]]--間的一串字符

str3 = [[Lua]]

str4 = [[使用雙括號時,甚至能包含換行數(shù)據(jù)

換行了

最后一行]]

--輸出所有字符串

print(str1)

print(str2)

print(str3)

print(str4)

接下來你需要完成下面的練習:

新建三個變量s1、s2、s3

分別存入字符串數(shù)據(jù):str、abc、233,使輸出打印正確


--請在空白處補全代碼

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

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

6.2 轉義字符

在上一節(jié)中,我們學習了如何聲明字符串。

但是我們有時候會遇到一些特殊的問題,如:如何輸出單引號和雙引號?如何輸出回車換行?

也許我們可以用下面的方式簡單規(guī)避,輸出單引號時,聲明字符串用雙引號括起來,像下面這樣


str = "'"

同理,輸出雙引號時,聲明字符串用單引號括起來,像下面這樣


str = '"'

但是,這樣會出現(xiàn)一個問題:如何同時顯示單引號和雙引號?這里就需要轉義字符登場了。

轉義字符用于表示不能直接顯示的字符,比如后退鍵、回車鍵、等。

以 開頭的都是轉義字符,下面時常用的轉義字符格式:

轉義字符含義
n換行(LF),將當前位置移到下一行開頭
r回車(CR),將當前位置移到本行開頭
反斜杠字符
'單引號
"雙引號
?空字符(NULL)
ddd1到3位八進制數(shù)所代表的任意字符
xhh1到2位十六進制所代表的任意字符

例如,如果我們想給str賦值一個單引號,一個雙引號('"),那么我們可以這樣寫:


str = "'""

下面需要你來完成一個簡單的任務:

新建一個變量str,給str賦值為

abcd"ef'gh]]

并打印出來


str = --補全代碼

print(str)

--輸出應為abcd"ef'gh]]

6.3 string拼接

字符串和字符串可以相加嗎?可以!我們可以用拼接符號來將兩個獨立的字符串拼起來。

我們使用..來表示字符串拼接符號,如下面的示例代碼:


print('abc'..'def')

str1 = '123'

str2 = '999'

print(str1..str2)

下面你要完成這個任務:

已知三個字符串變量s1、s2、s3

請將他們按順序拼接起來,存入all,并使用print輸出結果


s1,s2,s3 = "aaa","bbb","ccc"

all = --請補全代碼

print(all)

6.4 number轉string

上面一節(jié)學習了如何拼接字符串,這個方法固然很好用,但是有時候我們會遇到一個需求,那就是把number類型的變量和string類型的變量拼接起來,組成一個新的string

比如下面的變量ns,如何拼接起來呢?


n = 123

s = 'm/s'

我們可以直接將number類型的變量n轉換成string類型的值,這樣就可以拼接了

使用tostring(value)函數(shù)即可實現(xiàn)這一操作:


n = 123

s = 'm/s'

result = tostring(n)..s

print(result)

下面你要完成這個任務:

已知三個變量n1、s、n2

然后將他們按順序拼接起來,存入變量result,使輸出結果正確

小提示:在某些情況下,Lua會自動將number類型轉換成string類型


n1,s,n2 = 1,"abc",2

result = --請補全代碼

print(result)

6.5 string轉number

上面一節(jié)學習了如何將number轉成string,這一節(jié)我們來學習如何將string轉成number

比如下面的變量s,存儲的內容是一個字符串,但是代表了一個數(shù)字,如何轉成number再與n相加計算呢?


n = 123

s = '2333'

我們可以直接將string類型的變量s轉換成number類型的值,這樣就可以計算了

使用tonumber(value)函數(shù)即可實現(xiàn)這一操作:


n = 123

s = '2333'

result = tonumber(s) + n

print(result)

下面你要完成這個任務:

已知三個字符串變量s1s2、s3,其內容均為純數(shù)字

請計算他們的算術和,賦值給新建的變量result,使下面代碼輸出正確結果


s1,s2,s3 = "11","12","100"

result = --請補全代碼

print(result)

七、邏輯運算

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 = 21

b = 10

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

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

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

print('<的結果',a

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

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

下面問題來了,運行以下代碼,將會輸出什么結果?請自行思考


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

我們可以通過以下實例來更加透徹的理解邏輯運算符的應用:


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 = 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

以下四行判斷代碼,正確的是?

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


n = 1--這個數(shù)可能是任意數(shù)字

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.1 條件判斷

上面一節(jié)學習了布爾類型,那么這個需要用到哪里呢?我們需要用它來進行某些判斷。

在Lua中,可以使用if語句來進行判斷,如下面所舉例的代碼,可以判斷n是否為小于10的數(shù):


n = 5

if n < 10 then

print('n小于10')

end

我們整理一下,實際上if語句就是如下結構:


if 條件 then

符合條件的代碼

end

下面是你需要完成的事:

已知變量n,請判斷n是否為奇數(shù),如果是,請給n的值加上1

如果你覺得有難度,請查看下面的提示:

  • 求出n除以2的余數(shù):n % 2
  • n的值加上1:n = n + 1

--已知一個number變量n

n = 5 --這個數(shù)字是幾都有可能

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

if 你的條件 then

要做的事

end

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

8.2 多條件判斷

上面一節(jié)學習了簡單的if語句寫法,這一節(jié)我們來學習多條件分支語句

在Lua中,可以使用if語句來進行判斷,同時可以使用else語句,表示多個分支判斷


if 條件1 then

滿足條件1

elseif 條件2 then

不滿足條件1,但是滿足條件2

else

前面條件全都不滿足

end

舉個例子,比如有一個數(shù)字n

  • 當它大于等于0、小于5時,輸出太小,
  • 當它大于等于5、小于10時,輸出適中,
  • 當它大于等于10時,輸出太大

那么代碼就像如下這樣:


n = 1--更改這個數(shù)多運行幾次試試

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是否為奇數(shù),

  • 如果是,請給n的值加上1
  • 如果不是,請將n的值改為原來的兩倍

--已知一個number變量n

n = 5 --這個數(shù)字是幾都有可能

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

if 你的條件 then

要做的事

else

要做的事

end

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

8.3 判斷三角形合法性(自測題)

你需要使用前面幾章的知識,來完成下面的題目

已知三個number類型的變量a、b、c,分別代表三根木棒的長度

請判斷,使用這三根木棒,是否可以組成一個三角形(兩短邊之和大于第三邊)

  • 如果可以組成,就打印出true
  • 如果不可以,就打印false

a,b,c = 1,2,3--多改幾個數(shù)值自行測試

--補全代碼

8.4 if的判斷依據(jù)(自測題)

我們在前面了解到,Lua 把 false 和 nil 看作是false,其他的都為true(包括0這個值,也是相當于true)

那么問題來了,執(zhí)行下面的代碼,將會輸出什么?


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)

九、函數(shù)

9.1 初識函數(shù)

函數(shù)是指一段在一起的、可以做某一件事兒的程序,也叫做子程序。

在前面的內容中,我們已經接觸過了函數(shù)的調用,這個函數(shù)就是前面用到了很多次的print(...)。

調用函數(shù)只需要按下面的格式即可:

函數(shù)名(參數(shù)1,參數(shù)2,參數(shù)3,......)

為何要使用函數(shù)?因為很多事情都是重復性操作,我們使用函數(shù),可以快速完成這些操作

下面我們舉一個最簡單的函數(shù)例子,這個函數(shù)沒有傳入參數(shù)、沒有返回值

它實現(xiàn)了一個簡單的功能,就是輸出Hello world!:


function hello()

print('Hello world!')

end

這個函數(shù)名為hello,我們可以按下面的方法進行調用(執(zhí)行):


function hello()

print('Hello world!')

end

hello()

這行代碼會輸出Hello world!。

同時,在Lua中,函數(shù)也是一種變量類型,也就是說,hello實際上也是一個變量,里面存儲的是一個函數(shù),我們可以用下面的代碼來理解:


function hello()

print('Hello world!')

end

a = hello

--把hello函數(shù)同時賦值給a變量

a()

hello()

--a和hello變量指向同一個函數(shù)

--所以執(zhí)行結果和hello()相同

因為函數(shù)只是個變量,你甚至在一開始可以這樣聲明hello函數(shù):


hello = function()

print('Hello world!')

end

hello()

下面你需要做一件簡單的事情:

  • 新建一個函數(shù)變量biu,使其執(zhí)行后會打印biubiubiu這個字符串
  • 新建一個函數(shù)變量pong,使其與biu指向的函數(shù)相同

--請在此處補全代碼

--請使下面的調用可以正常打印出biubiubiu

biu()

pong()

print("biu和pong相等嗎?",biu==pong)

9.2 local變量

之前我們創(chuàng)建的變量,都是全局變量,這種變量在代碼運行周期從頭到尾,都不會被銷毀,而且隨處都可調用。

但是當我們代碼量增加,很多時候大量新建全局變量會導致內存激增,我們需要一種可以臨時使用、并且可以自動銷毀釋放內存資源的變量,要怎么解決呢?

我們可以使用local標志來新建臨時變量,使用local創(chuàng)建一個局部變量,與全局變量不同,局部變量只在被聲明的那個代碼塊內有效。

參考下面的代碼:


a = 123

function add()

local n = a+2

print(n)

end

add()

print(n)

上面的代碼中,n就是一個局部變量,它只在這個funcion中有效,并且函數(shù)運行完后會自動回收這部分的內存。

我們應該盡可能的使用局部變量,以方便lua虛擬機自動回收內存空間,同時減少資源占用提高運行速度。

下面請閱讀以下代碼,思考一下,正確的輸出結果是什么:


str = 'abc'

function connect()

local s = str..'def'

end

print(s,str)

9.3 函數(shù)參數(shù)

在前幾章的使用中,我們知道函數(shù)是可以傳入參數(shù)的,如print(123)

那么,我們如何編寫可以傳入參數(shù)的函數(shù)呢?可以按下面的模板來寫


function 函數(shù)名(參數(shù)1,參數(shù)2,...)

代碼內容

end

這里傳入的參數(shù),等價于在函數(shù)內部新建了一個local的變量,修改這些數(shù)據(jù)不會影響外部的數(shù)據(jù)(除了后面還沒有講到的table等類型)

舉個例子,比如下面的函數(shù),可以實現(xiàn)打印出兩個傳入值的和:


function add(a,b)

print(a+b)

end

add(1,2)

--會輸出3

這段代碼其實等價于:


function add()

local a = 1

local b = 2

print(a+b)

end

add()

下面問題來了,請設計一個函數(shù)p,可以按下面的調用方式來打印出物體的密度:


--補全這個函數(shù)的代碼,滿足題目要求

function p(a,b,c,m)

print()

end

--一個長方體的長寬高分別為a、b、c(單位米)

a = 1

b = 2

c = 3

--這個物體重量為m(單位克)

m = 230

--下面打印出密度

--注:密度計算公式 密度 = 質量 / 體積

p(a,b,c,m)

接下來我們會分享最后一部分。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 變量
    +關注

    關注

    0

    文章

    614

    瀏覽量

    28965
  • Lua
    Lua
    +關注

    關注

    0

    文章

    83

    瀏覽量

    10972
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    實現(xiàn)免調整VCO1的IC (第二部分)

    實現(xiàn)免調整VCO1的IC (第二部分)
    發(fā)表于 05-07 13:18 ?46次下載

    AT91SAM9260使用手冊第二部分

    AT91SAM9260使用手冊第二部分
    發(fā)表于 03-10 09:13 ?86次下載

    常用單片機實例與仿真_第二部分

    第二部分 常用單片機實例與仿真 需要的下載
    發(fā)表于 11-10 17:37 ?13次下載

    無線信道的信道容量:第二部分_英文版

    無線信道的信道容量:第二部分_英文版,感興趣的可以看看。
    發(fā)表于 08-05 17:32 ?0次下載

    中國NB-IOT產業(yè)聯(lián)盟-第二部分問題清單-20160824

    中國NB-IOT產業(yè)聯(lián)盟-第二部分問題清單
    發(fā)表于 01-11 12:00 ?7次下載

    2012年PSoC數(shù)?;旌显O計培訓_第二部分

    2012年PSoC數(shù)?;旌显O計培訓_第二部分
    發(fā)表于 10-27 09:32 ?26次下載
    2012年PSoC數(shù)模混合設計培訓_<b class='flag-5'>第二部分</b>

    如何使用 Nios II 處理器進行你中意的設計之第二部分教程

    使用 Nios II 處理器進行設計”第二部分
    的頭像 發(fā)表于 06-11 14:36 ?5460次閱讀
    如何使用 Nios II 處理器進行你中意的設計之<b class='flag-5'>第二部分</b>教程

    AN-389: 使用Σ-Δ轉換器—第二部分[中文版]

    AN-389: 使用Σ-Δ轉換器—第二部分[中文版]
    發(fā)表于 03-19 06:38 ?0次下載
    AN-389: 使用Σ-Δ轉換器—<b class='flag-5'>第二部分</b>[中文版]

    有時你需要一點收獲第二部分

    有時你需要一點收獲第二部分
    發(fā)表于 04-19 11:32 ?9次下載
    有時你需要一點收獲<b class='flag-5'>第二部分</b>

    超聲波感應器會被用于何處?—— 第二部分

    超聲波感應器會被用于何處?—— 第二部分
    發(fā)表于 11-01 08:27 ?2次下載
    超聲波感應器會被用于何處?—— <b class='flag-5'>第二部分</b>

    如何實現(xiàn)更高的系統(tǒng)效率——第二部分:高速柵極驅動器

    如何實現(xiàn)更高的系統(tǒng)效率——第二部分:高速柵極驅動器
    發(fā)表于 11-02 08:15 ?2次下載
    如何實現(xiàn)更高的系統(tǒng)效率——<b class='flag-5'>第二部分</b>:高速柵極驅動器

    設計一臺物聯(lián)網模塊燈——第二部分

    設計一臺物聯(lián)網模塊燈——第二部分
    發(fā)表于 11-02 08:16 ?0次下載
    設計一臺物聯(lián)網模塊燈——<b class='flag-5'>第二部分</b>

    救世主Ga N來啦!第二部分:測量

    救世主Ga N來啦!第二部分:測量
    發(fā)表于 11-03 08:04 ?0次下載
    救世主Ga N來啦!<b class='flag-5'>第二部分</b>:測量

    生成任意量級的偏置電流網絡(第二部分

    生成任意量級的偏置電流網絡(第二部分
    發(fā)表于 11-03 08:04 ?0次下載
    生成任意量級的偏置電流網絡(<b class='flag-5'>第二部分</b>)

    基于模型的 GaN PA 設計基礎知識:I-V 曲線中有什么?(第二部分,共兩部分

    基于模型的 GaN PA 設計基礎知識:I-V 曲線中有什么?(第二部分,共兩部分
    的頭像 發(fā)表于 12-26 10:16 ?2194次閱讀
    基于模型的 GaN PA 設計<b class='flag-5'>基礎知識</b>:I-V 曲線中有什么?(<b class='flag-5'>第二部分</b>,共兩<b class='flag-5'>部分</b>)