-- 题目1:-- 给定表 t = {"apple", "banana", "apple", "orange", "banana", "apple"}
-- 写一个函数 countFreq(tbl) 返回一个新表,统计每个元素出现次数
-- 例如:返回 {apple=3, banana=2, orange=1}
Lualocal function countFreq(tbl) local result = {} for _, v in pairs(tbl) do result[v] = (result[v] or 0) + 1 end return result end -- 测试题目1 local t1 = {"apple", "banana", "apple", "orange", "banana", "apple"} local freq = countFreq(t1) print("题目1结果:") for key, value in pairs(freq) do print(key .. ": " .. value) end print()
-- 题目 2:合并表
-- 给定两个表 t1 = {1,2,3} 和 t2 = {4,5,6}
-- 写一个函数 mergeTable(t1, t2) 返回一个合并后的表 {1,2,3,4,5,6}
Lualocal function mergeTable(t1, t2) local result = {} -- 复制t1的元素 for i, v in ipairs(t1) do result[i] = v end -- 添加t2的元素 for i, v in ipairs(t2) do table.insert(result, v) end return result end -- 测试题目2 local table1 = {1,2,3} local table2 = {4,5,6} local merged = mergeTable(table1, table2) print("题目2结果:") for i, v in ipairs(merged) do print(i .. ": " .. v) end print()
-- 题目3:惰性计数器
-- 写一个函数 makeCounter(start)
-- 返回一个函数,每次调用返回计数器的下一个值
-- 例如:
-- c = makeCounter(10)
-- print(c()) --> 11
-- print(c()) --> 12
Lualocal function makeCounter(start) if type(start) ~= "number" then error("起始值必须是数字") end local count = start return function() count = count + 1 return count end end -- 测试题目3 print("题目3结果:") local c = makeCounter(10) print("第一次调用:", c()) --> 11 print("第二次调用:", c()) --> 12 print("第三次调用:", c()) --> 13 print()
-- 题目 4:高阶函数 map
-- 写一个函数 map(tbl, func)
-- 返回一个新表,每个元素是 func(原元素) 的返回值
-- 例如:map({1,2,3}, function(x) return x^2 end) 返回 {1,4,9}
Lualocal function map(tbl, func) local result = {} for i, v in ipairs(tbl) do result[i] = func(v) end return result end -- 测试题目4 print("题目4结果:") local numbers = {1, 2, 3} local squares = map(numbers, function(x) return x^2 end) for i, v in ipairs(squares) do print(i .. ": " .. v) end print()
-- 题目5:提取数字
-- 写一个函数 extractNumbers(str)
-- 输入:"a1b23c456"
-- 输出表 {1,23,456}
Lualocal function extractNumbers(str) local result = {} for num in str:gmatch("%d+") do -- gmatch会找到所有匹配的数字 table.insert(result, tonumber(num)) end return result end -- 测试题目5 print("题目5结果:") local numbers = extractNumbers("a1b23c456") for i, v in ipairs(numbers) do print(i .. ": " .. v) end print()
-- 题目6:邮箱验证
-- 写一个函数 isEmail(str)
-- 如果 str 是邮箱格式(xxx@yyy.zzz)返回 true,否则 false
-- 使用 Lua 模式匹配
Lualocal function isEmail(str) if type(str) ~= "string" then return false end -- 更合理的邮箱模式:至少一个字符@至少一个字符.至少一个字符 local pattern = "^[%w%.%-_]+@[%w%.%-]+%.%w+$" return str:match(pattern) ~= nil end -- 测试题目6 print("题目6结果:") print("test@example.com:", isEmail("test@example.com")) print("invalid.email:", isEmail("invalid.email")) print("user@domain.co.uk:", isEmail("user@domain.co.uk")) print()
-- 题目 7:学生成绩表
-- 有学生表 students = {
-- {name="Tom", score={math=90, english=85}},
-- {name="Lucy", score={math=95, english=92}},
-- {name="Jack", score={math=85, english=88}}
-- }
-- 写函数 averageMath(students) 返回数学平均分
Lualocal function averageMath(students) local sum = 0 local count = 0 for _, student in ipairs(students) do sum = sum + student.score.math count = count + 1 end return sum / count end -- 测试题目7 print("题目7结果:") local students = { {name="Tom", score={math=90, english=85}}, {name="Lucy", score={math=95, english=92}}, {name="Jack", score={math=85, english=88}} } print("数学平均分:", averageMath(students)) print()
-- 题目 8:去重并排序
-- 给定表 t = {5,2,7,2,3,5,8,1}
-- 写一个函数 uniqueSort(tbl)
-- 返回一个新表,内容去重并从小到大排序 {1,2,3,5,7,8}
Lualocal function uniqueSort(tbl) if type(tbl) ~= "table" then -- 这里原来写错了 print("输入错误") return nil end -- 用哈希表去重 local seen = {} local unique = {} for _, v in ipairs(tbl) do if not seen[v] then seen[v] = true table.insert(unique, v) end end -- 排序 table.sort(unique) return unique end -- 测试题目8 print("题目8结果:") local testArray = {5,2,7,2,3,5,8,1} local result = uniqueSort(testArray) for i, v in ipairs(result) do print(i .. ": " .. v) end print()
-- 题目 9:嵌套表深度求和
-- 给定表 t = {1, {2, 3}, {4, {5, 6}}}
-- 写函数 sumNested(tbl) 返回所有数字的和 1+2+3+4+5+6 = 21
Lualocal function sumNested(tbl) if type(tbl) ~= "table" then return 0 -- 返回0而不是nil更好 end local sum = 0 for _, value in ipairs(tbl) do if type(value) == "number" then sum = sum + value elseif type(value) == "table" then sum = sum + sumNested(value) end end return sum end -- 测试题目9 print("题目9结果:") local nestedTable = {1, {2, 3}, {4, {5, 6}}} print("嵌套表总和:", sumNested(nestedTable))
【Lua】题目小练11
大飞pkz2025-08-31 18:56