为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红颜莎娜 2023-06-20 16:41:52
运行代码时出现逻辑错误,它继续抛出第一个 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 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(","))            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: """)
查看完整描述

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

我建议稍微重新格式化代码,以便更容易找到用户名是否存在以及密码是否正确。


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


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: """)


查看完整回答
反对 回复 2023-06-20
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

你在循环中有一个逻辑错误 - 你似乎将文本文件中的每一行与提供的用户名和密码进行比较,如果它们不匹配则说明错误 - 忽略用户可能不在第一行的事实文件。仅当您遍历整个文件但未找到用户,或找到用户但密码不匹配时,才会显示该错误。


另外,我认为您根本不需要内部循环,您声明了 x 和 y 但不使用它们,您是否尝试过打印它们并检查它们包含的内容?


无论如何,这是我认为循环应该是什么样子的轮廓


found = False

for 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")

       break

if not found:

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


查看完整回答
反对 回复 2023-06-20
  • 2 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信