-- 向table中的某个前缀列表插入一个新单词 functioninsert(index,value) local list = statetab[index] if list == nilthen statetab[index] = {value} else list[#list + 1] = value end end
functionallwords() local line = io.read() --当前行 local pos = 1--行中的当前位置 returnfunction()-- 迭代器函数 while line do--只要还有行就一直循环 local s,e = string.find(line,"%w+",pos) if s then--找到下一个单词吗? pos = e+1--更新下一个位置 returnstring.sub(line,s,e) --返回该单词 else line = io.read() -- 没有找到单词,尝试下一行 pos = 1--从行首位置从新开始 end end returnnil--所有行都遍历完 end end
---------主程序------------- local N = 2 local MAXGEN = 10000 local NOWORD = "\n"
-- 构建table local w1,w2 = NOWORD,NOWORD for w in allwords() do insert(prefix(w1,w2),w) w1 = w2 w2 = w end
insert(prefix(w1,w2),NOWORD)
--生成文本 w1 = NOWORD w2 = NOWORD --重新初始化
for i = 1,MAXGEN do local list = statetab[prefix(w1,w2)] --从列表中选择一个随机项 local r = math.random(#list) local nextword = list[r] if nextword == NOWORD thenreturnend io.write(nextword," ") w1 = w2 w2 = nextword end
emmmm,测试结果一般,在命令行里输入内容最后想要结束的时候记得使用Ctrl+Z来结束。
输出“Hello,World!”
1
print"Hello,World!"
当函数参数仅为一个并且是字符串或者表的构造式的时候,有没有括号都无所谓
实现两数相加
获取用户输入的两个数字,并使两数相加,结果输出到屏幕上。
1 2 3 4 5 6 7 8 9
print"Please enter a number:" num1 = io.read("*number")
print"Please enter a number again:" num2 = io.read("*number")
sums = num1 + num2
print(num1.." + "..num2.." = "..sums)
求商及余数
获取用户输入的两个整数,计算结果输出到屏幕上。
Lua的number类型式双精度的浮点数,而且正常的运算结果是个浮点数。
可以使用Lua的math库里的math.modf(x) —— 返回 x 的整数部分和小数部分。 第二个结果一定是浮点数。
1 2 3 4 5 6 7 8 9 10 11 12 13
print(5/3) --1.6666666666667 print(5%3) --2
print"Please enter a number:" num1 = io.read("*number")
print"Please enter a number again:" num2 = io.read("*number") shang,flots = math.modf(num1/num2) -- shang 是运算的整数部分,flots是运算得到的小数部分 yushu = num1 - shang * num2
functionjudgeVowel(str) for i = 1,#vowel do if str == vowel[i] then returntrue end end returnfalse end
local j = 1
while j < 5do print"Please enter a character:" strs = io.read() if #strs == 1then if judgeVowel(strs) then print(strs .. " is a vowel") else print(strs .. " is a consonant") end else print("Please enter a character!!!") end j = j+1 end
判断闰年
闰年是能够被4整除但不能被100整除的年份。
1 2 3 4 5 6 7 8 9 10 11 12 13
local j = 1 while j < 5do print"Please enter a years" years = io.read("*number") num1,num2 = math.modf(years/4) num3,num4 = math.modf(years/100) if num2 == 0and num4 ~= 0then print(years.." is a leap year") else print(years.." not is a leap year") end j = j+1 end