我正在尝试构建一个可以将我带到菜单的工作登录功能。 这是我的代码:
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:
(数字列表实际上没有溢出到下一行) 这是我的注册功能,我认为这是相关的。
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
答案 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))