来自文件的多个用户的简单登录脚本

Simple login script multiple users from file

我在 Python 3.5.2.

中的登录脚本有问题

我的代码的问题是只有文件 users.txt 中的第一个用户可以通过登录。第二个和第三个用户收到 "Wrong username/password" 消息。我在这里错过了什么?

users.txt 中的数据格式如下:

姓名|姓氏|角色|ID|用户名|密码

John|Johnson|Director|1|admin|admin

迈克|麦德森|首席财务官|2|迈克|迈克

问题是只有 John 通过了登录,我还需要 Mike。

def check():

    username = str(input("Username: "))
    password = str(input("Password: "))

    f = open("users.txt", "r")
    file_content = f.read()
    users = file_content.split("\n")
    for user in users:
        user_array = user.split("|")
        uname = user_array[4]
        pword = user_array[5]
        if uname == username and pword == password:
            print("Hello " + user_array[1] + ".")
            print("You are logged in as: " + user_array[2] + ".")
            main_menu()
        else:
            print("Wrong username/password.")
            print("Try again!\n\n")
            check()
check()

感谢帮助!

这是因为

if uname == username and pword == password:

因为您在函数的开头要求用户输入用户名和密码,我假设他们输入 "admin" 和 "admin",所以此检查只会通过该组合。您应该在 for 循环中包含 input 请求,或者重组它以使其更好地工作。

逻辑完全错误。你需要这样的东西:

def check():
    # You need to read it only once, not every loop
    users = open("users.txt").read().split("\n")
    for i in range(len(users)): users[i] = users[i].split("|")

    # Now what you want is to loop infinitely
    # until you get correct username/password
    # instead of recursive calling this
    # function over and over again
    while True:
        username = str(input("Username: "))
        password = str(input("Password: "))

        for user in users:
            uname = user[4]
            pword = user[5]

            if uname == username and pword == password:
                print("Hello " + user[1] + ".")
                print("You are logged in as: " + user[2] + ".")
                main_menu()

        # If none of the records matched the input
        print("Wrong username/password.")
        print("Try again!\n\n")

check()

当您读取文本文件时,john 将排在第一位,因此当您使用 if 语句比较用户名和密码是否匹配时,您仅与文本文件的第一行进行比较。所以当你输入 mike 时,它​​会在文本文件上与 john 进行比较,据我了解,这就是你出错的地方