如何将多行文本文件分解为一个列表,该列表可以迭代以检查 python 中是否输入 == 文本文件?

运行代码时出现逻辑错误,它继续抛出第一个 if 语句错误“错误!用户名不存在。” 我需要能够以管理员身份登录,然后通过将用户添加到 .txt 文件来添加用户,之后,如果程序再次运行,我可以通过管理员或在 txt 中创建的新用户之一登录文件。我似乎无法正确拆分它,以便循环在登录时正确地遍历列表。


例子:


print(new_lines) = [['admin', 'adm1n'], ['kevin', 'kev1n'], ['dorothy', '1234']]


.txt 文件内容,每个条目在新行 = admin,adm1n\n kevin,kev1n\n dorothy,1234


到目前为止的代码:


import time


#User input of username and password


user_name = input("Username:\n")

user_pass = input("Password: \n")


#Opening document


with open("user.txt", "r+", encoding = "utf-8-sig") as f:

    

    new_lines = []

    for line in f:

        new_line = line.strip()

        new_lines.append(new_line.split(","))

        

    print(new_lines)


    #Loop to enter user name and password

    for x in new_lines:

        for y in x:

            if user_name != new_lines[:][0]:

                print("Error! Username does not exist.")

                user_name = input("Username:\n")

                user_pass = input("Password: \n")

                

            elif user_pass != new_lines[:][1]:

                print("Error! Incorrect password.")

                user_name = input("Username:\n")

                user_pass = input("Password: \n")

                

            else:

                print("Welcome back!")

                break

        break

        

    #User options to choose from        

    user_choice = input("""\nPlease select one of the following options:

                            \nr - register user

                            \na - add task 

                            \nva - view all tasks

                            \nvm - view my tasks

                            \ne - exit

                            \nAnswer: """)


红颜莎娜
浏览 127回答 2
2回答

qq_遁去的一_1

我建议稍微重新格式化代码,以便更容易找到用户名是否存在以及密码是否正确。import time#User input of username and passworduser_name = input("Username:\n")user_pass = input("Password: \n")#Opening documentwith open("user.txt", "r+", encoding = "utf-8-sig") as f:        new_lines = []    for line in f:        new_line = line.strip()        new_lines.append(new_line.split(","))usernames = [acc[0] for acc in new_lines]pws = [acc[1] for acc in new_lines]while True:    if user_name not in usernames:        print("Error! Username does not exist.")        user_name = input("Username:\n")        user_pass = input("Password: \n")    else:        pw_index = usernames.index(user_name)        if user_pass != pws[pw_index]:            print("Error! Incorrect password.")            user_name = input("Username:\n")            user_pass = input("Password: \n")        else:            print("Welcome back!")            break#User options to choose from        user_choice = input("""\nPlease select one of the following options:                        \nr - register user                        \na - add task                         \nva - view all tasks                        \nvm - view my tasks                        \ne - exit                        \nAnswer: """)

慕妹3146593

你在循环中有一个逻辑错误 - 你似乎将文本文件中的每一行与提供的用户名和密码进行比较,如果它们不匹配则说明错误 - 忽略用户可能不在第一行的事实文件。仅当您遍历整个文件但未找到用户,或找到用户但密码不匹配时,才会显示该错误。另外,我认为您根本不需要内部循环,您声明了 x 和 y 但不使用它们,您是否尝试过打印它们并检查它们包含的内容?无论如何,这是我认为循环应该是什么样子的轮廓found = Falsefor current_user, current_password in new_lines:    if current_user == user_name:        if current_password == user_pass:            print("Welcome back!")            found = True        else:            print("Error! Incorrect password")       breakif not found:    print("Error! Username does not exist.")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python