如何使用通过CSV读取的python文本文档的if语句?>

2024-10-02 10:25:53 发布

您现在位置:Python中文网/ 问答频道 /正文

所以让我直截了当地说,我的代码应该读取一个.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的更新代码。你知道吗


Tags: 文件csv代码用户intxt密码def
3条回答

我认为你的问题在于那句话:

if user1UsernameInput == users[0]:

正如前面创建的users是元组列表,因此user[0]表示元组(列表中的第一个元组),可能缺少第二个索引,应该是

if user1UsernameInput == users[0][0]:

编辑:根据@Idlehands的建议修复,谢谢。你知道吗

您将(仅)用户名与包含用户名和密码的元组(作为两个元素)进行比较。你知道吗

您只检查列表的第一个元素。你知道吗

换句话说,你正在有效地

users = [('user1', 'pass1'), ('user2', 'pass2')]
compare_against = users[0]
# compare_against is now the tuple ('user1', 'pass1')
if 'user1' == compare_against:
    pass  # can never reach here

显然,您希望遍历所有用户和密码对,并检查它们是否与用户输入的对相同。你知道吗

input_pair = (user1UsernameInput, user1PasswordInput)
for user_pass in users:
    if input_pair == user_pass:
        print("Correct")

解决办法很简单。您正在比较字符串和元组。你知道吗

你的名单是这样的 users=[('user_name','password')] 并且users[0]将是列表中的第一个元素,它是元组('user_name','password'),因此字符串'user_name'永远不会等于('user_name','password')

试试users[0][0]

 if user1UsernameInput == users[0][0]:
        print("Correct")
        return username
    else:
        print("CREATE NEW USER")

另一种方法是比较元组

if (user1UsernameInput,user1PasswordInput)==users[0]

如果文件/列表包含多个用户名和密码。最好使用in运算符

 if (user1UsernameInput,user1PasswordInput) in  users:

相关问题 更多 >

    热门问题