如何使答案检查更紧凑

我是编程新手,现在我的代码非常笨重,我想知道是否有一种更紧凑的函数来检查答案,现在我只是将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
点赞
用户14843094
用户14843094

你可以把你的选项放进列表里,然后通过 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")
2021-05-21 15:15:37
用户369792
用户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
用户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
用户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