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