You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua 5.1程序处理性别输入时异常重复提示后终止求助

问题根源:条件判断的逻辑语法错误

你遇到的问题完全不是repeat-until结构的问题,这个结构本身非常适合做这种需要重复验证输入的场景——真正的问题出在你的条件判断写法上,Lua的逻辑运算规则和你想的不一样。

错误原因拆解

先看你的if条件:

if playerGender ~= "boy" or "girl" or "male" or "female" then

Lua会按优先级先计算playerGender ~= "boy",得到一个布尔值(true或false),然后把这个布尔值和字符串"girl"做or运算。在Lua里,非空字符串会被当作true,所以不管前面的布尔值是什么,整个or表达式的结果都是true——这就导致这个if条件永远成立,不管你输入什么,都会进入错误提示分支。

同样,你的until条件也犯了一样的错:

until (playerGender == "boy" or "girl" or "male" or "female")

这里"girl"本身就是true,所以整个条件永远是true,第一次循环执行后就会直接退出repeat,这就是为什么你第二次输入后程序直接终止的原因。

修正方案

你需要明确地把每个值都和playerGender做比较,用and/or连接完整的判断表达式:

方案1:直接写全条件判断

print("What is your name?")
playerName = io.read()
print("Are you a boy or a girl?")
playerGender = io.read()
repeat
    if playerGender ~= "boy" and playerGender ~= "girl" and playerGender ~= "male" and playerGender ~= "female" then
        print("I'm sorry, that is not a valid answer.")
        print("Are you a boy or a girl?")
        playerGender = io.read()
    end
until playerGender == "boy" or playerGender == "girl" or playerGender == "male" or playerGender == "female"

方案2:用表存储合法值(更易扩展)

如果以后要加更多合法选项,用表来维护会更方便:

print("What is your name?")
playerName = io.read()
print("Are you a boy or a girl?")
playerGender = io.read()

local validGenders = {
    boy = true,
    girl = true,
    male = true,
    female = true
}

repeat
    if not validGenders[playerGender] then
        print("I'm sorry, that is not a valid answer.")
        print("Are you a boy or a girl?")
        playerGender = io.read()
    end
until validGenders[playerGender]

总结

repeat-until结构完全不需要更换,它就是为这种"先执行一次,再判断是否重复"的场景设计的——你只需要把条件判断的语法写对就行。

内容的提问来源于stack exchange,提问作者360programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:08:29