Python3密码给了我一个循环

时间:2013-12-08 04:14:39

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

在制作脚本时,我从python3解释器中获得了一些奇怪的beheiviour 这个bug就是这个 我输入了正确的用户名和密码我被授予无限循环,没有条件

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

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

1 个答案:

答案 0 :(得分:0)

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

  1. UserAdminName == AdminCheck[0][0]然后输入最后一个elif(可能是正确的密码)
  2. AdminOK设置为True(可能意味着密码已经过验证)
  3. 由于AdminOK为真,所以while的条件为真
  4. 我认为while循环应该让AdminOK为假,这样当密码不正常时你会再次循环。此外,or应为and。所以将while循环更改为

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

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