模块:ExampleMath

来自70DNF
跳转到导航 跳转到搜索

此模块的文档可以在模块:ExampleMath/doc创建

-- 模块名称:Module:ExampleMath
-- 描述:提供各种数学计算功能的Lua模块
-- 作者:示例模块
-- 版本:1.0

local p = {}  -- p代表要导出的函数表

-- 内部辅助函数(外部不可直接调用)
local function validateNumber(num, paramName)
    if type(num) ~= 'number' then
        error(string.format("参数'%s'必须是数字,当前类型是: %s", paramName, type(num)), 2)
    end
    return num
end

-- 计算两个数的和
function p.add(frame)
    local args = frame.args
    local a = tonumber(args[1]) or 0
    local b = tonumber(args[2]) or 0
    return a + b
end

-- 计算两个数的乘积
function p.multiply(frame)
    local args = frame.args
    local a = tonumber(args.a) or tonumber(args[1]) or 1
    local b = tonumber(args.b) or tonumber(args[2]) or 1
    return a * b
end

-- 计算平均值
function p.average(frame)
    local args = frame.args
    local sum = 0
    local count = 0
    
    for key, value in pairs(args) do
        local num = tonumber(value)
        if num then
            sum = sum + num
            count = count + 1
        end
    end
    
    if count == 0 then
        return "错误:未提供有效数字"
    end
    
    return sum / count
end

-- 计算阶乘
function p.factorial(frame)
    local args = frame.args
    local n = math.floor(tonumber(args[1]) or 0)
    
    if n < 0 then
        return "错误:阶乘不能为负数"
    elseif n == 0 then
        return 1
    end
    
    local result = 1
    for i = 1, n do
        result = result * i
    end
    return result
end

-- 生成数学表格
function p.mathTable(frame)
    local args = frame.args
    local start = tonumber(args.start) or 1
    local stop = tonumber(args.stop) or 10
    
    local result = '{| class="wikitable"\n'
    result = result .. '|+ 数学表 (' .. start .. ' 到 ' .. stop .. ')\n'
    result = result .. '|-\n'
    result = result .. '! 数字 !! 平方 !! 立方 !! 平方根\n'
    
    for i = start, stop do
        result = result .. '|-\n'
        result = result .. '| ' .. i .. 
                 ' || ' .. (i * i) .. 
                 ' || ' .. (i * i * i) .. 
                 ' || ' .. string.format("%.2f", math.sqrt(i)) .. '\n'
    end
    
    result = result .. '|}'
    return result
end

-- 带有命名参数的计算器
function p.calculator(frame)
    local args = frame:getParent().args  -- 获取父页面的参数
    
    local operation = args.operation or "add"
    local num1 = tonumber(args.num1) or 0
    local num2 = tonumber(args.num2) or 0
    local format = args.format or "text"
    
    local result
    if operation == "add" then
        result = num1 + num2
    elseif operation == "subtract" then
        result = num1 - num2
    elseif operation == "multiply" then
        result = num1 * num2
    elseif operation == "divide" then
        if num2 == 0 then
            return "错误:除数不能为零"
        end
        result = num1 / num2
    else
        return "错误:未知的操作类型"
    end
    
    if format == "html" then
        return '<div style="border: 1px solid #ccc; padding: 10px; margin: 10px;">' ..
               '<strong>计算结果:</strong>' .. result .. '</div>'
    elseif format == "wikitext" then
        return "'''计算结果:'''" .. result
    else
        return "结果: " .. result
    end
end

return p  -- 必须返回模块函数表