如何使答案检查更紧凑
2021-5-21 15:26:31
收藏:0
阅读:158
评论:4
我是编程新手,现在我的代码非常笨重,我想知道是否有一种更紧凑的函数来检查答案,现在我只是将if then 语句一遍一遍地复制并粘贴,每次变量大写并按不同的方式拼写,例如,对于no,我有if then语句,N,n,no,NO,No,nO。
local men = io.read()
if men == "N" then
print(" 你决定一辈子都被人欺负,直到你老了去世。THE END")
return
end
if men == "NO" then
print(" 你决定一辈子都被人欺负,直到你老了去世。THE END")
return
end
if men == "no" then
print(" 你决定一辈子都被人欺负,直到你老了去世。THE END")
return
end
if men == "No" then
print(" 你决定一辈子都被人欺负,直到你老了去世。THE END")
return
end
if men == "n" then
print(" 你决定一辈子都被人欺负,直到你老了去世。THE END")
return
end
点赞
用户369792
你可以使用patterns。它们非常类似于在大多数编程语言中使用的正则表达式。在这里,我测试答案字符串,看它是否与你要查找的模式匹配。以下是模式的说明:
^-匹配字符串开头,不允许此前有任何字符。如果不包括此,则它可能在字符串后面找到“no”,即abcdNO[nN]-方括号([ ])可以让您包含可接受字符的列表,因此这里第一个字符需要为’n’或‘N’[oO]?-下一个字符必须是“o”或“O”,但是“?”表示它是可选的,可以出现0次或1次。$-匹配字符串结尾,因此不会匹配‘NOabcd’,因为在你的模式后面不能有任何字符。
总的来说,字符串必须以“n”或“N”开头,可能只有一个“o”或“O”,并且之后没有其他内容。
string.find(string,pattern)将查看是否匹配字符串模式,并返回其中找到的字符串位置,如果未找到则返回nil。
local answer = 'No'
local pattern = '^[nN][oO]?$'
if (string.find(answer, pattern) ~= nil) then
print('found!')
else
print('not found!')
end
2021-05-21 15:21:01
用户7396148
你可以使用一个 set 来检查输入是否是集合的成员。在 Lua 中,可以像这样定义一个简单的集合:
local no = {
N = true,
n = true,
no = true,
NO = true,
No = true,
nO = true
}
然后通过像访问表一样的方式使用它:
local men = io.read()
if no[men] then
print("你决定一辈子都被人欺负,所以你继续这样生活直到死去。 THE END")
return
end
在这个上下文中,Lua 中的 nil 将被视为 false,而任何不是集合中键的值都将返回 nil。
2021-05-21 15:25:29
用户369792
我添加了另一个答案,提供了一个更简易的更改方法。一般来说,应该尽量避免重复代码。相同的“print”语句重复出现了几次。
你可以使用或操作符将所有的测试组合成一个表达式。
local men = io.read()
if men == "N" or men == "NO" or men == "no" or men == "No" or men == "n" then
print(" 你认为你能一直被人摆布一生,所以你继续下去,直到老去而死。 THE END")
return
end
这是你目前的最佳方法,但如果你没有像这样简单的条件,想要重用代码,你可以创建一个包含重复代码的函数,然后调用它。比如说,如果你想根据某些值做一些不同的事情:
function badEnding()
print(" 你认为你能一直被人摆布一生,所以你继续下去,直到老去而死。 THE END")
-- 注意:return不是必需的,缺省返回值将是nil
end
local men = io.read()
if men == "N" then return badEnding() end
if men == "NO" then
print("嘿,不需要大喊大叫!")
return badEnding()
end
if men == "no" then return badEnding() end
if men == "No" then return badEnding() end
if men == "n" then return badEnding() end
2021-05-21 15:37:35
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

你可以把你的选项放进列表里,然后通过 for 循环询问你的输入是否与列表中的语句相等。如果没有,那就没有错误。
例如,如果你有这样一个列表:
l_words = ["N","n","no","NO","N0","nO"] inp = input("Your input: ") for i in l_words: if inp != i: print("true input") else: print("false input")