如何让我的登录功能正常工作

时间:2015-11-25 16:23:28

标签: python python-3.x login

我正在尝试构建一个可以将我带到菜单的工作登录功能。 这是我的代码:

def login(userlist):
    verified = False
    name = input('username: ')
    password = input('password: ')
    while not verified:
        name = input('username: ')
        password = input('password: ')
        if [name, password] in userlist:
            verified = True
            print('You logged in the system!')
        else:
            print('invalid username\password.')
    return verified

即使我在程序中键入了正确的用户名和密码,它仍然说无效... 我错过了什么?此外,userlist是一个文本文件,其中用户名和密码由行分隔。由于我的加载功能,我能够读取文件:

def load():
    user_file = open('userdata.txt', 'r')
    userlist = []
    line = user_file.readline()
    while line != '':
        line = line.split()
        userlist.append(line)
        line = user_file.readline()
    user_file.close()
    return userlist

    My text file ends up looking like this:

用户名#password #list

Sam #password#[1,2,...]

(数字列表实际上没有溢出到下一行) 这是我的注册功能,我认为这是相关的。

 def register(userlist):
# ASK FOR USERNAME
name = input('Choose your username: ')
while search(userlist, name):
    print('The username is not available. Choose somethng else. ')
    name = input('Choose your username: ')
# ASKING FOR PASSWORD
password = input('Choose your password: ')
p = input('Retype your password:  ')
while p != password:
    password = input('Choose your password: ')
    p = input('Retype your password: ')

# SURVEY INDEX

a = list(range(26))
user = [name, p, a]
userlist.append(user)
print('Your registration is successful, your user namw ia: ', name)
user_file = open('userdata.txt', 'a')
user_file.write(str(name) + '   ' + str(p) + '  ' + str(a)+ '\n')
user_file.close()

return userlist

2 个答案:

答案 0 :(得分:0)

如果userlist是文件IO对象:

for i in userlist.readlines():
    if [name, password] in i.split()  # assumes no whitespace in password is allowed
        verified = True
        print('You logged in the system!')

如果userlist是dict:

if (name,password) in userlist.items()

答案 1 :(得分:0)

您的加载功能存在问题。当您检查用户列表中是否[name, password]未将用户名和密码存储在一起时,它们位于用户列表中的单独列表中。

所以我改变了加载功能来做你想要的。 我改变了加载功能,但假设你的文本文件看起来像这样(缺少换行也很好)。

编辑:好的,所以我现在更改了我的答案,我知道你的文本文件是什么样的。

def login(userlist):
    verified = False
    print(userlist)
    while not verified:
        name = input('username: ')
        password = input('password: ')
        if [name, password] in userlist:
            verified = True
            print('You logged in the system!')
        else:
            print('invalid username\password.')
    return verified

def load():
    userlist = []
    with open('test.txt', 'r') as user_file:
        for line in user_file:
            line = line.strip()
            if not line:
                continue
            userlist.append(line.split()[:2]) # Gets only name and password
    return userlist

if __name__ == '__main__':
    user_list = load()
    login(user_list)

如果您想更改为字典,那么您可以执行此操作

if [name, password] in userlist:变为if userlist.get(name) == password:

userlist = []变为userlist = {}

userlist.append(line.split()[:2])变为

name, password = line.split()[:2]
userlist[name] = password

旁注: 我建议将你的写行改为更干净的东西。

user_file.write("{0} {1} {2}\n".format(name, p, a))