从文件中简单登录脚本多个用户

时间:2016-12-15 21:17:24

标签: python python-3.x login-script

我的Python 3.5.2中的登录脚本有问题。

我的代码存在问题,只有文件 users.txt 中的第一个用户才能通过登录。第二和第三个用户获得"错误的用户名/密码"信息。我在这里缺少什么?

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

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

约翰|约翰逊|导演| 1名|管理员|管理员

麦克|马德森| CFO | 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()

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

因为行

if uname == username and pword == password:

因为您在功能开头询问用户的用户名和密码,我认为他们输入了" admin"和" admin",此检查只会通过该组合。您应该在for循环中包含input个请求,或者重新构建它以更好地工作。

答案 1 :(得分:0)

逻辑错了。你需要这样的东西:

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()

答案 2 :(得分:0)

当您阅读文本文件时,john将是第一个,因此当您使用if语句来比较用户名和密码是否匹配时,您只与文本文件的第一行共同编写。因此,当你进入迈克时,它会与约翰在文本文件上进行比较,据我所知,这就是你出错的地方