Python:如何将从.txt读取的两个列表(用户名和密码)与用户输入进行比较

Python:如何将从.txt读取的两个列表(用户名和密码)与用户输入进行比较,python,authentication,Python,Authentication,我编写了一个代码,要求用户输入用户名和密码。然后,程序应打开一个包含用户名和密码列表的.txt文件,并检查输入的条目是否对.txt文件中的用户名和密码数据库有效。这是我第一次在这里发布,请告知您还需要什么。我希望附上我的.py文件和.txt文件 我可以输入第一个用户名和密码,但第二个,我必须输入两次才能成功。我确信这是由于for循环,但是我不知道如何将输入与存储在.txt中的用户名和密码进行比较 #======== User Login ==================== #read t

我编写了一个代码,要求用户输入用户名和密码。然后,程序应打开一个包含用户名和密码列表的.txt文件,并检查输入的条目是否对.txt文件中的用户名和密码数据库有效。这是我第一次在这里发布,请告知您还需要什么。我希望附上我的.py文件和.txt文件

我可以输入第一个用户名和密码,但第二个,我必须输入两次才能成功。我确信这是由于for循环,但是我不知道如何将输入与存储在.txt中的用户名和密码进行比较

#======== User Login ====================

#read the use.txt
username_reg = []
password_reg = []
i = 0
username_list = []
password_list = []

with open('user.txt', 'r+') as f:           #open user.txt
    for line in f:                          #Now we reading user.txt
        line = line.replace(" ", "")        #replace space before password with no space
        line = line.replace("\n", "")       #remove the next line character as this will take a space in the list
        line = line.split(",")              #separate user name and password
        username_reg = line[0]
        password_reg = line[1]
        username_list.append(username_reg)
        password_list.append(password_reg)
#List check      
print(username_list)
print(password_list)
print(len(username_list))

username = input("Please enter username: ")
password = input("Please enter password: ")

for i in range(len(username_list)):
    if username == str(username_list[i]) and password == str(password_list[i]):
        print('''Please select one of the following options:
                r - register user
                a - add task
                va - view all tasks
                vm - view my tasks
                e - exit''')
        break

    while username != str(username_list[i]) and password != str(password_list[i]):
        print("invalid username or password")   
        username = input("Please enter username: ")
        password = input("Please enter password: ")
        i += 1

print("Great success") 

我尝试过修改一下for循环,它对我很有效。看一看

i=0;login=0此处的login类似于一个标志。登录成功后,将获取值1,否则将保持0。 当我在列表中时: 如果用户名==strusername\u列表[i]和密码==strpassword\u列表[i]: 登录名=1 “打印”请选择以下选项之一: 注册用户 a-添加任务 va-查看所有任务 vm-查看我的任务 电子出口' 打破 i+=1 如果i==lenusername\u列表和login==0: 打印无效的用户名或密码 用户名=输入请输入用户名: 密码=输入请输入密码: i=0
for循环中的第二个if条件检查列表中所有值的登录是否成功,这意味着用户名和密码不正确,因此if条件要求新的输入,并将while循环从0重新启动。

。当涉及到将某些特定数据与实体关联时,字典非常有用。在本例中,我将使用一个将密码与每个用户名相关联

考虑到您的数据库存储的信息如下:

user1, password1
user2, password2
user3, password3
然后我们可以执行以下操作:

content = {}

with open('db.txt', 'r') as file:
    for line in file.read().splitlines():
        user = line.split(', ')
        content.update({user[0]: user[1]})

username = input("Please enter username: ")
password = input("Please enter password: ")

if password == content[username]:
    print('''Please select one of the following options:
                r - register user
                a - add task
                va - view all tasks
                vm - view my tasks
                e - exit''')
我们基本上是打开文件,使用str类的splitlines函数读取它的行,并在每行上迭代,使用split“,”分隔用户名和密码,因为“,”是分隔符,并使用每个用户对应的新记录更新contentdictionary


然后,在询问凭据后,我们只需在内容字典中查找给定的用户名,并检查密码是否相同。

我忘记添加user.txt文件的格式为:admin、adm1n abc、defgRevilscano,非常感谢。我承认,我是一个初学者,在这几行代码中我学到了一些新东西,它们非常有效。没问题,如果我能从我的答案中澄清你想要的任何东西,我很乐意帮助你我会做的,但首先让我读一下你在那里使用的一些东西,并尝试理解其中的逻辑。肯定会有更多的问题困扰你:D