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