【问题标题】:Python3 Passwords gives me a loopPython3 Passwords 给了我一个循环
【发布时间】:2013-12-25 08:01:30
【问题描述】:

在编写脚本时,我从 python3 解释器中得到了一些奇怪的行为 错误就是这个 我输入正确的用户名和密码,我被授予一个没有条件的无限循环

def LoginAdmin():
    # 3 chances seulement ...
    LoginTrial = 3
    position=0
    AdminOK=0
    AdminCheck=[]
    PassCheck = open('Data_LoginAdmin', 'r')
    #lecture des lignes et mise en données les informations mdp et login
    for ligne in PassCheck:
        print(ligne, end='')
        words = ligne.split(":")
        AdminCheck.append(words)
    print(AdminCheck)

    PassCheck.close()
    LoginAdminAcces = True

    while (((LoginTrial != 0) or (AdminOK == True))):
        UserAdminName=input("Identification : ")
        if not UserAdminName.isalpha:
            LoginTrial = LoginTrial - 1
            print("Autentification Échouer essai restant : ", LoginTrial)
        elif UserAdminName != AdminCheck[0][0]:
            LoginTrial = LoginTrial - 1
            print("Autentification Échouer essai restant : ", LoginTrial)
        elif UserAdminName == AdminCheck[0][0]:
            while (((LoginTrial != 0) or (AdminOK == True))):
                UserAdminPass=input("Mot de pass : ") 
                if not UserAdminName.isalpha:
                    LoginTrial = LoginTrial - 1
                    print("Autentification Échouer essai restant : ", LoginTrial)
                elif UserAdminPass != AdminCheck[0][1]:
                    LoginTrial = LoginTrial - 1
                    print("Autentification Échouer essai restant : ", LoginTrial)
                elif UserAdminPass == AdminCheck[0][1]:
                    LoginAdminAcces = True
                    AdminOK=True
                    print(AdminOK)
                    print("Accès apprové ...")
    if LoginTrial == 0:
        print("Accès Refusé !!!")
        LoginAdminAcces = False
    return (LoginAdminAcces)

这是文件 Data_LoginAdmin

Admin:AdminPass

如果有人知道为什么它会挽救我的生命......有点......

【问题讨论】:

    标签: python-3.x login while-loop infinite-loop


    【解决方案1】:

    不完全确定发生了什么,但这是一个潜在的问题:

    1. UserAdminName == AdminCheck[0][0] 然后你输入最后一个 elif(大概是正确的密码)
    2. AdminOK设置为True(大概意思是密码已经过验证)
    3. while 的条件为真,因为 AdminOK 为真

    我认为while循环应该希望AdminOK为假,这样当密码不正确时你会再次循环。此外,or 应该是and。所以把while循环改成

    while (((LoginTrial != 0) and (AdminOK == False))):
    

    Et "Autentification Échouée" car c'est UNE autentification。

    【讨论】:

    • 此外,由于 AdminOK 是一个布尔值,您可以直接说 not AdminOK
    • 哈哈,我也需要多睡觉。那绝对是 AND 而不是 OR。您希望用户有剩余的尝试次数并且尚未获得密码。
    • 好吧,如果用户名错误,用户实际上无法实际输入密码,那部分有效,第二部分实际上让我崩溃,因为真假由于某种原因被忽略
    猜你喜欢
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    相关资源
    最近更新 更多