lua if else while 语句限制?
lua if else while statements limits?
我正在尝试为游戏中基于 lua 的计算机制作程序。虽然当它 运行 它表现得很奇怪
--Tablet
oldpullEvent = os.pullEvent
os.pullEvent = os.pullEventRaw
while true do
term.clear()
term.setTextColor( colors.white )
term.setCursorPos(1, 1)
print("Please Enter Password:")
input = read("*")
incorrect = 0
while incorrect < 3 do
if input == "qwerty" then
print("Password Correct, Unlocking")
else
if incorrect < 3 then
incorrect = incorrect + 1
print("Password incorrect")
print(3 - incorrect, " tries remaining")
else
print(3 - incorrect, "tries remaining, locking phone for 1m")
local num = 0
while num < 60 do
if num < 60 then
term.clear()
term.setTextColor( colors.red )
term.setCursorPos(1, 1)
num = num + 1
print(60 - num, "s remaining")
sleep(1)
else
incorrect = 0
end
end
end
end
end
end
os.pullEvent = oldpullEvent
当它 运行 开始时
"Please enter password:"
输入 "qwerty" 它想要的密码后,它会无限循环 "Password Correct, Unlocking" 。
当我输入不正确的密码时,它不会 运行 else 语句中的任何代码,只是 returns 返回到输入密码屏幕。没有错误代码或崩溃。知道 lua 的人知道我的 while/if/elseif 函数是写错了还是变通了。
谢谢!
输入正确的密码后,您没有重置 incorrect
值。您要么需要使用 break
来中止循环,要么将 incorrect
设置为 3 或更大的值。
当输入正确的密码时,循环不会停止。输入正确的密码后,print("Password Correct, Unlocking")
后应放置一个 break
这是因为 input
在循环之外,更好的方法是这样的:
local incorrect = 0
while true do
term.clear()
term.setTextColor( colors.white )
term.setCursorPos(1, 1)
print("Please Enter Password:")
local input = read("*")
if input == "qwerty" then
print("Password Correct, Unlocking")
break
else
if incorrect < 2 then
incorrect = incorrect + 1
print("Password incorrect")
print(3 - incorrect, " tries remaining")
sleep(1) -- let them read the print.
else
print("out of attempts, locking phone for 1m")
for i = 10, 1, -1 do
term.clear()
term.setTextColor( colors.red )
term.setCursorPos(1, 1)
print(i, "s remaining")
sleep(1)
end
incorrect = 0
end
end
end
上面的代码将允许用户尝试输入密码 3 次,如果所有密码都被使用,他们将被锁定 60 秒并再尝试 3 次。重复此过程,直到输入正确的密码。
我已经删除了内部 while 循环,因为它不是必需的。 incorrect
已成为本地并移出 while 循环,因此每次用户输入密码时它都不会被重置。
read("*")
已移至 while 循环内,因此它每次都会提示用户输入密码,而不是询问一次然后无限循环。
代码已经过测试,似乎没有任何问题。
如果有任何代码没有意义,请随时提问。
我正在尝试为游戏中基于 lua 的计算机制作程序。虽然当它 运行 它表现得很奇怪
--Tablet
oldpullEvent = os.pullEvent
os.pullEvent = os.pullEventRaw
while true do
term.clear()
term.setTextColor( colors.white )
term.setCursorPos(1, 1)
print("Please Enter Password:")
input = read("*")
incorrect = 0
while incorrect < 3 do
if input == "qwerty" then
print("Password Correct, Unlocking")
else
if incorrect < 3 then
incorrect = incorrect + 1
print("Password incorrect")
print(3 - incorrect, " tries remaining")
else
print(3 - incorrect, "tries remaining, locking phone for 1m")
local num = 0
while num < 60 do
if num < 60 then
term.clear()
term.setTextColor( colors.red )
term.setCursorPos(1, 1)
num = num + 1
print(60 - num, "s remaining")
sleep(1)
else
incorrect = 0
end
end
end
end
end
end
os.pullEvent = oldpullEvent
当它 运行 开始时 "Please enter password:" 输入 "qwerty" 它想要的密码后,它会无限循环 "Password Correct, Unlocking" 。 当我输入不正确的密码时,它不会 运行 else 语句中的任何代码,只是 returns 返回到输入密码屏幕。没有错误代码或崩溃。知道 lua 的人知道我的 while/if/elseif 函数是写错了还是变通了。
谢谢!
输入正确的密码后,您没有重置 incorrect
值。您要么需要使用 break
来中止循环,要么将 incorrect
设置为 3 或更大的值。
当输入正确的密码时,循环不会停止。输入正确的密码后,print("Password Correct, Unlocking")
break
这是因为 input
在循环之外,更好的方法是这样的:
local incorrect = 0
while true do
term.clear()
term.setTextColor( colors.white )
term.setCursorPos(1, 1)
print("Please Enter Password:")
local input = read("*")
if input == "qwerty" then
print("Password Correct, Unlocking")
break
else
if incorrect < 2 then
incorrect = incorrect + 1
print("Password incorrect")
print(3 - incorrect, " tries remaining")
sleep(1) -- let them read the print.
else
print("out of attempts, locking phone for 1m")
for i = 10, 1, -1 do
term.clear()
term.setTextColor( colors.red )
term.setCursorPos(1, 1)
print(i, "s remaining")
sleep(1)
end
incorrect = 0
end
end
end
上面的代码将允许用户尝试输入密码 3 次,如果所有密码都被使用,他们将被锁定 60 秒并再尝试 3 次。重复此过程,直到输入正确的密码。
我已经删除了内部 while 循环,因为它不是必需的。 incorrect
已成为本地并移出 while 循环,因此每次用户输入密码时它都不会被重置。
read("*")
已移至 while 循环内,因此它每次都会提示用户输入密码,而不是询问一次然后无限循环。
代码已经过测试,似乎没有任何问题。
如果有任何代码没有意义,请随时提问。