Python 试图对照文件中存储的内容检查用户详细信息输入?

Python 试图对照文件中存储的内容检查用户详细信息输入?,python,Python,我在userdetails.txt中保存了123123,我总是输入123作为用户名,输入123作为密码。我没有输出。” 我只需要一个程序,接受用户名和密码,然后验证它,以测试它是否在文本文件中找到 以下是我到目前为止的想法 new = input("Do you have an existing username and password? Enter Y/N: ") userdetails = open("userdetails.txt","r+") if new == "Y": use

我在userdetails.txt中保存了123123,我总是输入123作为用户名,输入123作为密码。我没有输出。”

我只需要一个程序,接受用户名和密码,然后验证它,以测试它是否在文本文件中找到

以下是我到目前为止的想法

new = input("Do you have an existing username and password? Enter Y/N: ")

userdetails = open("userdetails.txt","r+")

if new == "Y":

username = input("Enter username: ")

password = input("Enter password: ")

for line in userdetails:

    usn = userdetails.readline

    if usn == username:

        print("Username authenticated")

        break

        usn = "v"

for line in userdetails:

    psw = userdetails.readline

    if psw == password:

        print("Password authenticated")

        break

        psw = "v"

if usn == "v" and psw == "v":

    authentication = True

    print("Authentication succesful..")

对您的代码进行一些小的清理。这应该会得到您想要的输出(请注意,在我创建的userdetails.txt文件中,用户名和密码由“:”分隔,如:“123:456”):


对您的代码进行一些小的清理。这应该会得到您想要的输出(请注意,在我创建的userdetails.txt文件中,用户名和密码由“:”分隔,如:“123:456”):


目前,您的代码只检查userdetails.txt文件中是否存在任何用户名和密码。也就是说,它从用户处获取用户名和密码,并在文件中运行,以查看是否有与用户名完全匹配的行。如果是,则打印“username authenticated”。然后,它继续读取文件,直到遇到与密码匹配的文件,如果遇到,则打印“密码已验证”

更好的实现是在同一行上有一个用户名和密码组合,例如

用户1密码1

用户2密码2

用户3密码3

这样做会将特定用户名链接到其密码。如果您这样做,那么下面的代码应该对用户进行身份验证

new = input("Do you have an existing username and password? Enter Y/N: ")
userdetails = open("userdetails.txt", "r+")

if new == "Y":
    user_found = False
    input_username = input("Enter username: ").strip()
    input_password = input("Enter password: ").strip()

    for line in userdetails:
        username, password = line.split(' ')
        if input_username == username.strip():
            user_found = True
            print("User {0} is present in file".format(username))
            if input_password == password.strip():
                print("Authentication success!")
            else:
                print("Incorrect password for {0}".format(username))

            break

    if not user_found:
        print("Username {0} not found".format(input_username))

您的代码目前只检查userdetails.txt文件中是否存在任何用户名和密码。也就是说,它从用户那里获取用户名和密码,并在文件中运行以查看是否有与用户名完全匹配的行。如果是,则打印“用户名已验证”。然后,它继续读取该文件,直到遇到与密码匹配的文件,如果遇到,则打印“密码已验证”

更好的实现是在同一行上有一个用户名和密码组合,例如

用户1密码1

用户2密码2

用户3密码3

这样做会将特定用户名链接到其密码。如果您这样做,那么下面的代码应该对用户进行身份验证

new = input("Do you have an existing username and password? Enter Y/N: ")
userdetails = open("userdetails.txt", "r+")

if new == "Y":
    user_found = False
    input_username = input("Enter username: ").strip()
    input_password = input("Enter password: ").strip()

    for line in userdetails:
        username, password = line.split(' ')
        if input_username == username.strip():
            user_found = True
            print("User {0} is present in file".format(username))
            if input_password == password.strip():
                print("Authentication success!")
            else:
                print("Incorrect password for {0}".format(username))

            break

    if not user_found:
        print("Username {0} not found".format(input_username))

看起来在第一个或第二个for循环中的任何地方都不会使用“line”…而且您的break语句发生在分配psw或usn之前。我建议在userdetails.txt文件中的用户名和密码之间使用分隔符。userdetailsamd
usn=userdetails.readline
(应该是
readlines()
)中的两行是多余的;在文件对象(如
userdetails
)中循环将返回
是一个字符串。试着打印你正在阅读的价值观,看看你得到了什么,而不是你期望的,我感觉你会非常惊讶。阅读如何使用
open
也可能有所帮助。为什么将数据保存为123123格式?!您可以将它们拆分为一些字符,如“,”。。。(123123)你同意吗?因为我想写代码?看起来不像你在第一个或第二个for循环中的任何地方使用“line”…而且你的break语句发生在分配psw或usn之前。我建议在userdetails.txt文件中的用户名和密码之间使用分隔符。userdetailsamd
usn=userdetails.readline
(应该是
readlines()
)中的两行是多余的;在文件对象(如
userdetails
)中循环将返回
是一个字符串。试着打印你正在阅读的价值观,看看你得到了什么,而不是你期望的,我感觉你会非常惊讶。阅读如何使用
open
也可能有所帮助。为什么将数据保存为123123格式?!您可以将它们拆分为一些字符,如“,”。。。(123123)你同意吗?因为我想写代码?您可以在userdetails.txt文件中使用任意字符分隔用户名和密码。如果使用的不是空格,请确保相应地更新line.split()。{0}是用来做什么的?{0}是占位符。在运行时,解释器将用.format()的内容替换它。例如,
print(“1+2={0}”。格式(1+2))
将打印1+2=3,其中3替换为{0}。您可以使用任何字符在userdetails.txt文件中分隔用户名和密码。如果使用的不是空格,请确保相应地更新line.split()。{0}是用来做什么的?{0}是占位符。在运行时,解释器将用.format()的内容替换它。例如,
print(“1+2={0}”。格式(1+2))
将打印1+2=3,其中3替换为{0}