所以让我直截了当地说,我的代码应该读取一个.txt文件,然后接受用户输入的用户名和密码,并将其与文件中的用户进行比较。我现在的代码是:
import csv
def user1Authenticate():
with open('users.txt', mode='r') as file:
reader = csv.reader(file)
users = [(row[0], row[1]) for row in reader]
user1UsernameInput = input("username: ")
user1PasswordInput = input("password: ")
print(users[0])
if (user1UsernameInput, user1PasswordInput) in users:
print("Correct")
return username
else:
print("CREATE NEW USER")
def users():
print('User 1, Please log in.')
user1 = user1Authenticate()
print('User 2, Please log in.')
#user2 = authentication()
#print("User 1 is", user1, "and user 2 is", user2)
users()
我的文件的语法是'用户名,密码'。你知道吗
问题是,它不会让我验证用户名,只会打印'创建新用户'。你知道吗
顺便说一句,我的老师说,我们只能使用文本文件,而不是.json文件或数据库CSV。你知道吗
编辑:我还需要能够阅读多个用户,而不仅仅是一个。你知道吗
编辑2:添加了来自mad的更新代码。你知道吗
我认为你的问题在于那句话:
正如前面创建的
users
是元组列表,因此user[0]表示元组(列表中的第一个元组),可能缺少第二个索引,应该是编辑:根据
@Idlehands
的建议修复,谢谢。你知道吗您将(仅)用户名与包含用户名和密码的元组(作为两个元素)进行比较。你知道吗
您只检查列表的第一个元素。你知道吗
换句话说,你正在有效地
显然,您希望遍历所有用户和密码对,并检查它们是否与用户输入的对相同。你知道吗
解决办法很简单。您正在比较字符串和元组。你知道吗
你的名单是这样的
users=[('user_name','password')]
并且users[0]
将是列表中的第一个元素,它是元组('user_name','password')
,因此字符串'user_name'
永远不会等于('user_name','password')
试试
users[0][0]
另一种方法是比较元组
if (user1UsernameInput,user1PasswordInput)==users[0]
如果文件/列表包含多个用户名和密码。最好使用
in
运算符相关问题 更多 >
编程相关推荐