Lua練習題集嚢


  1 --1.table.sort()
  2 am = {"cc","nn","ll","dd"}
  3 arr = function ()
  4     for i =1,#am do
  5         print(i..","..am[i])
  6     end
  7 end
  8 table.sort(am)
  9 arr()
 10 
 11 --2.冒泡排序的另外一種寫法
 12 function bubble_sort(array)
 13     local tmp = 0
 14     for i =1,#array-1 do 
 15         for j =1,#array-i do 
 16             if array[j]>array[j+1] then 
 17                 tmp = array[j]
 18                 array[j]=array[j+1]
 19                 array[j+1] = tmp
 20             end
 21         end
 22     end
 23 end
 24 function main(...)
 25     local arr = {54,25,66,45,555,666,321,88,665,89}
 26     bubble_sort(arr)
 27     for i,v in pairs (arr) do 
 28         print("排序后的結果為:",i.."->"..v)
 29     end
 30 end
 31 main()
 32 --3.按降序進行排列
 33 tabl={"b", "a", "g", "c"}
 34 sortFunc = function(a,b) return a<b end 
 35 table.sort(tabl,sortFunc)
 36 print(table.concat(tabl,","))
 37 
 38 --4.獲得table中最大值的例子
 39 function maxTable(t)
 40     local temp = nil
 41     for k,v in pairs(t) do 
 42         if(temp==nil) then 
 43             temp = v
 44         end
 45         if temp<v then
 46             temp = v
 47         end
 48     end
 49     return temp
 50 end
 51 tab = {[1]=55,[2]=43,[3]=89,[4]=9,[5]=1}
 52 print("該表中的最大值為:",maxTable(tab))
 53 
 54 --5.創建自己的迭代器
 55 array2 = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}
 56 
 57 function elementIterator2(countTable)
 58     local inde =0 
 59     local coun1 = #countTable  --獲得其長度
 60     return function()   --匿名函數
 61         inde = inde+1   
 62         if inde<=coun1 then
 63             return countTable[inde]
 64         end
 65     end
 66 end
 67 
 68 for element in elementIterator2(array2) do 
 69     print(element)
 70 end
 71 
 72 --6.一個簡單的例子來實現迭代,實現數字n的平方
 73 function square(iteratorMaxCount,currentNumber)
 74     if currentNumber<iteratorMaxCount then 
 75         currentNumber = currentNumber+1
 76         return currentNumber,currentNumber*currentNumber
 77     end
 78 end
 79 for i ,n in square ,3,0 do 
 80     print(i,n)
 81 end
 82 
 83 --7.定義一個函數,傳入兩個參數並相加,相減,相乘,相除,取模,返回他們的運行結果
 84 function mathB(a,b)
 85     c1 = a+b 
 86     c2 = a-b 
 87     c3 = a*b 
 88     c4 = a/b 
 89     c5 = a%b 
 90     return c1,c2,c3,c4,c5
 91 end
 92 
 93 i = 5
 94 j = 9
 95 p1,p2,p3,p4,p5 = mathB(i,j)
 96 print(p1)
 97 print(p2)
 98 print(p3)
 99 print(p4)
100 print(p5)
101 
102 --8.定義一個函數利用循環讓這個函數能夠計算n的階乘
103 t = function(n)
104     local i =1
105     if n <1 then 
106         return 1
107     end
108     repeat i = n*i 
109     n = n-1
110     until n ==0
111     print(i)
112 end
113 print(t(5))
114 
115 --9.斐波那契數列
116 function fb(i)
117     if i<= 2 and i>0 then 
118         return 1
119     else
120         local j = fb(i-1)+fb(i-2)
121         return j 
122     end
123 end
124 i = 1
125 while i<=20 do 
126 print("想得到的斐波那的第"..i.. "個數是:"..fb(i))
127  i = i+1
128 end 
129 
130 --10.輸出三角形的形狀
131 for x = 1,7,1 do 
132     local j =""
133     for y = 1,7,1 do 
134         if y<=x then        --y>=x 變成倒三角了
135             j = j.."<>"
136         end
137     end
138     print(j)
139 end 
140 
141 --11.9*9乘法表
142 for i = 1,9 do 
143     local s = ""
144     for j = 1,9 do 
145         if j<=i then 
146             n = j*i
147             if n <=9 then 
148                 n = "0"..n 
149             end
150             s = s..j.."x"..i.."="..n.." "
151         end
152     end
153     print(s)
154 end
155 
156 --12.function 可以以“匿名函數”的方式通過參數傳遞
157 function testFun(tab,fun)
158     for k,v in pairs(tab) do 
159         print(fun(k,v))
160     end
161 end
162 tab = {key1 = "value1",key2 ="value2",key3 = "value3",key4 = "value4"}
163 testFun(tab,function(key,value)
164 return key.."="..value
165 end 
166 )
167 
168 --13.冒泡排序法  排列數組的10個元素(從大到小進行排列)
169 sz = {56,52,32,78,55,41,12,36,75,99}
170 i = 1
171 j = 1
172 while i < (#sz) do 
173     while j <=((#sz)-i) do  
174         if sz[j]<sz[j+1] then 
175             sz[j],sz[j+1] = sz[j+1],sz[j]   --實現2個數的交換
176         end
177         j = j+1
178     end
179     j = 1   --一輪比較完,進行 第二輪的比較
180     i = i + 1
181 end
182 for k,v in pairs(sz) do 
183     print(k.."鍵的值為:"..v)
184 end
185 
186 --14.用table.sort() 進行排序
187 am = {"b","a","f","c"}
188 array = function()
189     for i =1,#am do 
190         print(i..","..am[i])
191     end
192 end
193 table.sort(am)
194 array()
195 --***********另外一種************
196 am = {"b","a","f","c"}
197 table.sort(am)
198 for k,v in pairs(am) do 
199     print(k.."對應的值為:"..v)
200 end
201   --按降序進行pail
202 tab1={"a","g","b","p"}
203 sortFunc = function(a,b)
204     return b<a 
205 end
206 table.sort(tab1,sortFunc)
207 print(table.concat(tab1,",")) --p,g,b,a
208 
209 --15.lua中我們可以將“函數作為參數”傳遞給“函數”>> 函數可以作為數據賦值,也可以作為參數進行傳遞
210 PrintMy = function(parm)
211     print("打印函數-print",parm,"????")
212 end
213 function add(num1,num2,functionP)
214     re = num1+num2
215     functionP(re)
216 end
217 PrintMy(10)
218 add(5,10,PrintMy)
219 
220 
221 --16.求幾個數的平均值(將可變參數賦值給一個變量)
222 function average(...)
223     resule = 0
224     local arg={...}  --這個地方一定要添加(這個參數是 "不帶" 個數 )
225     for i,v in ipairs(arg) do 
226         result = resule+v
227     end
228     print("總共傳入"..#arg.."個數")
229     print("平均值為",result/#arg)
230 end
231 average(10,20,5,36,5,8)
232 
233 
234 --17.將阿拉佰數字改成漢字形式的數字 
235 print("^^^^^^^^將阿拉佰數字改成漢字形式的數字^^^^^^^^^^^")
236 local function NumToCn(num)
237     local size = #tostring(num)  --先轉換為字符串,然后 求其長度
238     local Cn = ""
239     local StrCn = {"","","","","","","","",""}
240     for i =1,size do 
241         Cn = Cn..StrCn[tonumber(string.sub(tostring(num),i,i))]
242     end
243     return Cn
244 end
245 print(NumToCn(7788555789))  --竟然不能寫很多函數,如果是很多的話,會報錯   
246 
247 --18.求階乘的另外一種寫法
248 function fb(n)
249     if n == 1 then 
250         return 1
251     else
252         return n *fb(n-1)
253     end
254 end
255 print(fb(6))
256 fb1 =fb    --函數值可以被賦值,賦值的和原來的具有一樣的用法
257 print(fb1(6))
258 
259 --19. 看一下下面2個輸入法的區別  
260 print(string.gsub("hello*js",".-","="))  --=h=e=l=l=o=*=j=s=    9
261 s =string.gsub("hello*js",".-","=")
262 print(s)                                 --=h=e=l=l=o=*=j=s=
263 
264 --20.table 中的元素 去重 操作
265 tableA = {8,9,1,9,8,7,5,6,3,2,1,2,3,8,9,6,4}
266 function table_unique(t)
267     local check ={} --定義一個空表
268     local n ={}  --在定義一個空表
269     for k,v in pairs(t) do
270         if not check[v] then  
271             n[k] = v
272             check[v]=v
273         end
274     end
275     return n 
276 end
277 for k,v in pairs (table_unique(tableA)) do 
278     print("value is:",v)
279 end
280 
281 --21.return 關鍵字的作用就是在函數中返回某些值
282 function ha(a,b)
283     x=a*b 
284     y=b*b 
285     return x,y
286 end
287 i = 10
288 j =5
289 d,c = ha(i,j)
290 print(d..""..c)
291 
292 --22.一個數90-100代表優秀,80-90代表良好,以此類推
293 local mathScore = 80
294 if 90<=mathScore and mathScore<=100 then 
295     print("優秀")
296 elseif 70<=mathScore and mathScore<=90 then 
297     print("良好")
298 elseif 60<= mathScore and mathScore<=70 then 
299     print("及格")
300 else
301     print("不及格")
302 end
303 
304 --23.寫一個腳本判斷兩個數是否都為小於或等於200的奇數(不能被2整除的數)
305 local a,b = 200,101
306 if a%2 == 1 and a<=200 and b<=200 and b%2 == 1 then 
307     print("ab 兩個數都為小於等於200的奇數")
308 elseif a%2==1 and a<=200 then
309     print("a為小於等於200的奇數")
310 elseif b%2==0 and b<200 then
311     print("b為小於等於200的奇數")
312 else
313     print("ab 兩個數不是小於等於200的奇數")
314 end
315 
316 --24.循環語句的嵌套使用
317 --有 1,2,3,4四個數字,能組成多少個互不相同且無重復數字的 三位數,並輸出在屏幕上面
318 for i = 1,4 ,1 do
319     for j = 1,4,1 do
320         for p = 1, 4,1 do
321             if  i ~= j and i ~= p and j ~= p then
322                 print(i..j..p)
323             end
324         end
325     end
326 end
327 --結果 太多讀者自己打印
328 
329 --25.9*9乘法表的另外的一種輸出方式 
330 for m=1,9 do                           -- for循環1到9  
331     local s = ""                       -- 定義一個用來輸出的字符串S  
332     for n=1,9 do                       -- 內層循環1到9  
333         if n <= m then                 -- 實現乘法表階梯增打印效果 
334             s = s..m.."x"..n.."="..m*n.."|"-- ..表示字符串拼接  
335            
336         end          
337     end  
338     print(s)  
339 end 
340 --[[
341 1x1=1|
342 2x1=2|2x2=4|
343 3x1=3|3x2=6|3x3=9|
344 4x1=4|4x2=8|4x3=12|4x4=16|
345 5x1=5|5x2=10|5x3=15|5x4=20|5x5=25|
346 6x1=6|6x2=12|6x3=18|6x4=24|6x5=30|6x6=36|
347 7x1=7|7x2=14|7x3=21|7x4=28|7x5=35|7x6=42|7x7=49|
348 8x1=8|8x2=16|8x3=24|8x4=32|8x5=40|8x6=48|8x7=56|8x8=64|
349 9x1=9|9x2=18|9x3=27|9x4=36|9x5=45|9x6=54|9x7=63|9x8=72|9x9=81|
350 --]]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM