Lua 编程方面的帮助,需要使用 3 个运算符(加、减和乘)构建基本计算器
2020-8-14 10:52:39
收藏:0
阅读:173
评论:2
我们有以下任务
使用 Lua 创建三个函数,可以执行加法、减法和乘法
程序应该:
接受任意数量的数字。 检查运算符 + - *。如果不是,则输出“无效的操作数”并退出。 接受两个操作数。如果任何操作数不是数字,则输出“无效的操作数”并退出。使用 - tonumber() 进行操作并打印结果。
我们编写了以下代码,但不能按预期工作,不确定我们在哪里出错了,请指引
local operators = {
["+"] = function(x,y) return x+y end,
["-"] = function(x,y) return x-y end,
["*"] = function(x,y) return x*y end
}
local function default()
print "Invalid operand"
end
local num1 = io.read()
local num2 = io.read()
local operator = io.read()
local func (
if operator == "+" then
local add = tonumber(num1) + tonumber(num2)
end
if operator == "-" then
local subtract = tonumber(num1) - tonumber(num2)
end
if operator == "*" then
local multiply = tonumber(num1) * tonumber(num2)
end
)
or default
print(func(num1,num2))
io.read()
正确的代码是
local operators = {
["+"] = function (x, y) return x + y end,
["-"] = function (x, y) return x - y end,
["*"] = function (x, y) return x * y end,
}
local operator = operators[io.read()]
local num1 = tonumber(io.read())
local num2 = tonumber(io.read())
if num1 and num2 then
if operator then
print(operator(num1, num2))
else
print("Invalid operator")
end
else
print("Invalid operand")
end
点赞
用户6879826
利用operators表来进行计算。不要将operator设置为用户输入的字符串,而是直接将其设置为用户需要的函数。如果用户输入的运算符不在表中,operator将被设置为nil:
local operator = operators[io.read()]
同样,将num1和num2直接设置为将要操作的数字,而不是将它们设置为用户输入的字符串:
local num1 = tonumber(io.read())
local num2 = tonumber(io.read())
如果tonumber无法将用户输入转换为数字,则num1或num2将被设置为nil。
您可以利用输入无效给出nil值的事实来验证输入。您不需要default()函数仅仅报告输入有误,因此我在下面的最终代码中没有使用它。如果您确实想要删除此报告到函数,则可能至少应区分错误的操作数和错误的运算符:
local function bad_operand()
print("Invalid operand")
end
local function bad_operator()
print("Invalid operator")
end
现在,您只需要检查参数是否有效,以及运算符是否有效,如果有效,则执行计算。以下是代码:
local operators = {
["+"] = function (x, y) return x + y end,
["-"] = function (x, y) return x - y end,
["*"] = function (x, y) return x * y end,
}
local num1 = tonumber(io.read())
local num2 = tonumber(io.read())
local operator = operators[io.read()]
if num1 and num2 then
if operator then
print(operator(num1, num2))
else
print("Invalid operator")
end
else
print("Invalid operand")
end
以下是一些示例运行:
~/code/lua/scratch $ lua calc.lua
3
4
-
-1
~/code/lua/scratch $ lua calc.lua
7
5
*
35
~/code/lua/scratch $ lua calc.lua
3
/
/
Invalid operand
~/code/lua/scratch $ lua calc.lua
3
4
/
Invalid operator
使用operators表的好处是,我们现在可以将运算符添加到表中,以扩展程序的功能,而无需进行任何其他更改:
local operators = {
["+"] = function (x, y) return x + y end,
["-"] = function (x, y) return x - y end,
["*"] = function (x, y) return x * y end,
["/"] = function (x, y) return x / y end,
["//"] = function (x, y) return x // y end,
}
测试新运算符:
~/code/lua/scratch $ lua calc.lua
3
4
/
0.75
~/code/lua/scratch $ lua calc.lua
7
3
//
2
2020-08-13 13:03:03
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

你的代码存在语法错误,意义不是很明确。
local func ( if operator == "+" then local add = tonumber(num1) + tonumber(num2) end if operator == "-" then local subtract = tonumber(num1) - tonumber(num2) end if operator == "*" then local multiply = tonumber(num1) * tonumber(num2) end ) or default为定义本地函数,你可以这样写:
local myFunction = function() end或者
local function myFunction() end但不是这样写:
local func()因为你定义函数时它永远不能是 nil。所以像这样简短定义一个函数
local default = function() end local myFunction = function() end or default就没意义。
您应该添加说明,让用户知道在调用 io.read() 之前应输入什么。
你代码中这部分没有用到:
local operators = { ["+"] = function(x,y) return x+y end, ["-"] = function(x,y) return x-y end, ["*"] = function(x,y) return x*y end }还有,你的
func函数仅仅创建了一些未使用的本地变量。该函数没有返回值,因此像
print(func(num1, num2))这样打印返回值的命令将无法打印预期的结果。此外,您没有检查用户是否输入了有效的字符,如数字或运算符。这将导致 Lua 错误,如果用户输入的是其他字符。