程序只是重复提示然后结束,不管我输入什么(使用 Lua 5.1)
Program Just Repeats Prompt and then Ends no Matter what I Input (using Lua 5.1)
我正在使用 Lua 5.1。这是我目前正在尝试的程序 运行.
print ("What is your name?")
playerName = io.read()
print ("Are you a boy or a girl?")
playerGender = io.read()
repeat
if playerGender ~= "boy" or "girl" or "male" or "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 "girl" or "male" or "female")
无论如何,无论我输入了有效答案之一还是只是随机乱码 - 程序响应 "I'm sorry, that is not a valid answer. Are you a boy or a girl?" 然后系统会提示你再次输入你的性别 - 但无论答案是什么只是终止程序 - 或者它继续执行 运行.
的任何其他代码
我的代码或逻辑是否有任何错误会使程序以这种方式运行?我应该使用我当前使用的 "repeat - if - then - end - else" 块以外的其他东西吗?如有任何帮助,我们将不胜感激!
显然,对于比较运算符和布尔运算符的工作原理存在误解。以下行将始终计算为 true
:
playerGender ~= "boy" or "girl" or "male" or "female"
这是为什么?为了更清楚地说明发生了什么,让我们添加一些括号来显示表达式是如何根据 operator precedence:
求值的
(playerGender ~= "boy") or ("girl") or ("male") or ("female")
这意味着,我们有四个表达式与 or
运算符相连。这意味着,如果这些子表达式中的任何一个为真,则整个表达式为真。在 Lua 中,all values except for false
and nil
是真实的。由于所有三个字符串 "girl"
、"male"
和 "female"
都为真,因此整个表达式始终为真。
下面会做你想做的:
(playerGender ~= "boy") and (playerGender ~= "girl") and (playerGender ~= "male") and (playerGender ~= "female")
现在您有四个表达式与 and
运算符连接,这意味着,所有子表达式都需要为真(即所有字符串比较都不相等),整个表达式才为真。
until
条件有同样的问题,即表达式总是为真,因为字符串总是为真。您可以按如下方式简化循环:
while playerGender ~= "boy" and playerGender ~= "girl" and playerGender ~= "male" and playerGender ~= "female" do
print ("I'm sorry, that is not a valid answer.")
print ("Are you a boy or a girl?")
playerGender = io.read()
end
我正在使用 Lua 5.1。这是我目前正在尝试的程序 运行.
print ("What is your name?")
playerName = io.read()
print ("Are you a boy or a girl?")
playerGender = io.read()
repeat
if playerGender ~= "boy" or "girl" or "male" or "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 "girl" or "male" or "female")
无论如何,无论我输入了有效答案之一还是只是随机乱码 - 程序响应 "I'm sorry, that is not a valid answer. Are you a boy or a girl?" 然后系统会提示你再次输入你的性别 - 但无论答案是什么只是终止程序 - 或者它继续执行 运行.
的任何其他代码我的代码或逻辑是否有任何错误会使程序以这种方式运行?我应该使用我当前使用的 "repeat - if - then - end - else" 块以外的其他东西吗?如有任何帮助,我们将不胜感激!
显然,对于比较运算符和布尔运算符的工作原理存在误解。以下行将始终计算为 true
:
playerGender ~= "boy" or "girl" or "male" or "female"
这是为什么?为了更清楚地说明发生了什么,让我们添加一些括号来显示表达式是如何根据 operator precedence:
求值的(playerGender ~= "boy") or ("girl") or ("male") or ("female")
这意味着,我们有四个表达式与 or
运算符相连。这意味着,如果这些子表达式中的任何一个为真,则整个表达式为真。在 Lua 中,all values except for false
and nil
是真实的。由于所有三个字符串 "girl"
、"male"
和 "female"
都为真,因此整个表达式始终为真。
下面会做你想做的:
(playerGender ~= "boy") and (playerGender ~= "girl") and (playerGender ~= "male") and (playerGender ~= "female")
现在您有四个表达式与 and
运算符连接,这意味着,所有子表达式都需要为真(即所有字符串比较都不相等),整个表达式才为真。
until
条件有同样的问题,即表达式总是为真,因为字符串总是为真。您可以按如下方式简化循环:
while playerGender ~= "boy" and playerGender ~= "girl" and playerGender ~= "male" and playerGender ~= "female" do
print ("I'm sorry, that is not a valid answer.")
print ("Are you a boy or a girl?")
playerGender = io.read()
end