Python 为什么这个简单的身份验证不起作用

Python 为什么这个简单的身份验证不起作用,python,authentication,Python,Authentication,好的,我写了以下代码: Authorised = False while not Authorised: useri = input("Enter your username: ") passi = input("Enter your password: ") users = open("Users.txt", "r") EndOfFile = False while not

好的,我写了以下代码:

Authorised = False
while not Authorised:
    useri = input("Enter your username: ")
    passi = input("Enter your password: ")
    users = open("Users.txt", "r")
    EndOfFile = False
    while not EndOfFile:
        userr = ""
        passr = ""
        line = users.readline()
        if line == "":
            EndOfFile = True
            continue
        splitlines = line.split(",")
        userr = splitlines[0]
        passr = splitlines[1]
        if useri == userr:
            if passi == passr:
                username = userr
                EndOfFile = True
                Authorised = True
                users.close()
            else:
                print("Wrong Password")
                EndOfFile = True
                users.close()
    if userr == "":
        print("Invalid username")
Users.txt:

A,B,
B,A,
出于某种原因,当我运行它时,它会说密码是错误的。我不知道为什么。如果有人能向我解释这一点,我将不胜感激


谢谢

奇怪的传输错误。我把Users.txt存储在onedrive上,从onedrive上取下,放到我的iPad上,并使用Python作为IDE。我不确定到底发生了什么。

抱歉,哈哈,当我发布评论时,我已经重新编写了你的代码,站起来喝杯咖啡,开始聊天,但是你会得到帖子的。不管怎样,这里有一些提示

  • 你在每个循环中读取密码,你不需要这样做
  • 你可以更干净地打破你的while循环
  • 在所选内容的
    if
    else
    部分,即
    users.close()
  • 在python中,使用上下文管理器来处理文件i/o更容易
看一看这样的东西:

打开('Users.txt',r')作为pass\u文件的
:
用户={}
lines=[line.replace(“\n”,”)作为pass_文件中的行。readlines()]
对于行中的行:
split_line=line.split(',')
用户[分割线[0]]=分割线[1]
尽管如此:
useri=input(“输入您的用户名:”)
passi=input(“输入密码:”)
如果用户中有useri:
如果用户[useri]==passi:
打印('有效用户')
打破
其他:
打印('InvadId登录')
其他:
打印('无效登录')

通过这种方式,您可以与所有用户一起构建一个初始的
dict
对象,然后检查它。

我无法重现该问题。这对我来说很好。你确定你正在通过大写输入,即
A
B
?是的,我刚刚输入了
A
B
输入你的用户名:A
输入你的密码:B
输入你的用户名:
你能分享你的输入和目标吗?我可以重现你的错误,我想我知道什么不起作用,什么都没有错,我只是不认为你写了你想要的,我不知道发生了什么,我已经重新写了txt,它现在起作用了。真奇怪,谢谢你!我试试这个:)