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 循环内,因此它每次都会提示用户输入密码,而不是询问一次然后无限循环。

代码已经过测试,似乎没有任何问题。

如果有任何代码没有意义,请随时提问。