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
相关产品推荐
相关产品推荐

