python密码登录程序三次、用户名保存在字典里_Python作业之三次登陆锁定用户

这篇博客介绍了一个Python作业,要求实现一个登录程序,如果用户在三次尝试中未能正确输入用户名和密码,该用户将被锁定。程序通过读写文本文件来管理锁定的用户。文章提供了三种不同的实现方法,包括对错误用户名计数和存储,以及锁定用户后的程序行为。
摘要由CSDN通过智能技术生成

作业之三次登陆锁定用户

作业要求如下:

1. 输入用户名和密码

2. 认证成功提示欢迎信息

3. 认证失败三次锁定用户

具体代码如下:

方法1:

import os#导入os模块

if os.path.exists('d:\login_name_list.txt'):#使用os模块的方法来检测该文件是否存在

with open('d:\login_name_list.txt') as f:#打开文件,默认只读方式

f_read = f.read().strip()

if len(f_read) > 0:

print('%s 该用户已被锁定(%s is locked)!'% (f_read,f_read))

exit()

else:

with open('d:\login_name_list.txt','w') as f:#创建文件

f.write(' ')

name_password_list = [{'zhang':'123'},{'lisi':'234'}]#声明用户名数据库

lock_name = []#声明空的被锁定用户的列表

judge = {}#声明空的存储用户名和密码的字典

while True:

login_name = input('请输入用户名(Please input name):').strip()#输入用户名

login_password = input('请输入密码(Please input password):').strip()#输入密码

judge[login_name] = login_password#把用户名和密码存储到字典中

if judge in name_password_list:#判断存储用户名和密码的字典是否存在数据库中

print('欢迎来到Python课堂(Welcome to PythonClass)!')

break

else:

print('用户名或密码错误(The name or password is error)!')

lock_name.append(login_name)#添加错误的用户名到锁定用户名的列表中

if lock_name.count(login_name) == 3:#判断错误的用户名是否等于三次

with open('d:\login_name_list.txt','w') as f_login:#打以写入的模式开文件

f_login.write(login_name)

print('%s 该用户已被锁定(%s is locked)!'%(login_name,login_name))

break

注:该方法实现的功能是:只有当同一个用户名输入错误次数超过三次时,该用户将会被锁定,但当有用户被锁定时,该程序后续不能再继续执行。

方法2:

import os#导入os模块

if os.path.exists('d:\login_name_list.txt'):#使用os模块的方法来检测该文件是否存在

with open('d:\login_name_list.txt') as f:#打开文件,默认只读方式

f_read = f.read().strip()

if len(f_read) > 0:

print('%s 该用户已被锁定(%s is locked)!'% (f_read,f_read))

exit()

else:

with open('d:\login_name_list.txt','w') as f:#创建文件

f.write(' ')

name_password_list = [{'zhang':'123'},{'lisi':'234'}]#声明用户名数据库

lock_name = []#声明空的被锁定用户的列表

judge = {}#声明空的存储用户名和密码的字典

for i in range(3):

login_name = input('请输入用户名(Please input name):').strip()#输入用户名

login_password = input('请输入密码(Please input password):').strip()#输入密码

judge[login_name] = login_password#把用户名和密码存储到字典中

if judge in name_password_list:#判断存储用户名和密码的字典是否存在数据库中

print('欢迎来到Python课堂(Welcome to PythonClass)!')

break

else:

print('用户名或密码错误(The name or password is error)!')

else:

print('错误次数太多(Error is too many)!')

with open('d:\login_name_list.txt','w') as f_login:#打以写入的模式开文件

f_login.write(login_name)

print('%s 该用户已被锁定(%s is locked)!'%(login_name,login_name))

注:该方法实现的功能是:只有三次错误的机会,当第三次错误时,将会把第三次错误的用户名进行锁定。

方法3:

import os#导入os模块

if os.path.exists('d:\login_name_list.txt'):#使用os模块的方法来检测该文件是否存在

with open('d:\login_name_list.txt') as f:#打开文件,默认只读方式

f_read = f.readlines()

for name_locked in f_read:

if len(name_locked) > 0:

print('%s 该用户已被锁定(%s is locked)!'%(name_locked.strip(),name_locked.strip()))

else:

with open('d:\login_name_list.txt','w') as f:#创建文件

f.write(' ')

name_password_list = [{'zhang':'123'},{'lisi':'234'}]#声明用户名数据库

lock_name = []#声明空的被锁定用户的列表

judge = {}#声明空的存储用户名和密码的字典

while True:

login_name = input('请输入用户名(Please input name):').strip()#输入用户名

login_password = input('请输入密码(Please input password):').strip()#输入密码

judge[login_name] = login_password#把用户名和密码存储到字典中

if judge in name_password_list:#判断存储用户名和密码的字典是否存在数据库中

print('欢迎来到Python课堂(Welcome to PythonClass)!')

break

else:

if login_name == name_locked.strip():

print('%s 该用户已被锁定(%s is locked)!'%(login_name,login_name))

exit()

print('用户名或密码错误(The name or password is error)!')

lock_name.append(login_name)#添加错误的用户名到锁定用户名的列表中

if lock_name.count(login_name) == 3:#判断错误的用户名是否等于三次

with open('d:\login_name_list.txt','r+') as f_login:#打以写入的模式开文件

f_login.read()

f_login.write(login_name)

f_login.write('

')

print('%s 该用户已被锁定(%s is locked)!'%(login_name,login_name))

break

注:该方法实现的功能是:只有当同一个用户名输入错误次数超过三次时,该用户将会被锁定,但当有用户被锁定时,该程序后续执行时会提升被锁定的用户,但程序可以继续运行。

方法3改进版:

import os#导入os模块

def lock_f():#声明一个函数

'''函数主要用于检测锁定用户的文件是否存在,不存在则创建一个空的文件,存在就把文件的每行内容作为列表的元素返回,

该函数的返回值为一个列表。'''

name_li = []#声明一个空列表,用于存放文件的每行内容

if os.path.exists('d:\login_name_list.txt'):#使用os模块的方法来检测该文件是否存在

with open('d:\login_name_list.txt') as f:#打开文件,默认只读方式

for name_locked in f.readlines():

print(name_locked.strip(),'已被锁定!')

name_li.append(name_locked.strip())#把除去空格和回车键的每行内容添加到列表中

else:

with open('d:\login_name_list.txt','w') as f:#创建文件

pass

return name_li#返回列表

if os.path.exists('d:\name_pwd.txt'):#判断存储用户名和密码的文件是否存在

with open('d:\name_pwd.txt') as f_pwd:

name_pwd = eval(f_pwd.read())#把文件中的字典类型的字符串转换为内存中的字典

else:

with open('d:\name_pwd.txt','w+') as f_pwd:#创建一个存储用户名和密码的文件

f_pwd.write('''{'zhang':'123','lisi':'234'}''')

f_pwd.seek(0)#指定指针位置

name_pwd = eval(f_pwd.read())#把文件中的字典类型的字符串转换为内存中的字典

lock_name = []#声明空的被锁定用户的列表

name_li = lock_f()#把函数的返回值进行赋值

print('欢迎来到Python学校,请先进行登录!')

while True:

login_name = input('请输入用户名(Please input name):').strip()#输入用户名

if login_name in name_li:#判断用户名是否存在列表中

print('%s 该用户已被锁定(%s is locked)!'%(login_name,login_name))

break

else:

with open('d:\login_name_list.txt','a+') as f_login:#打以追加可读的模式开文件

login_password = input('请输入密码(Please input password):').strip()#输入密码

if login_name in name_pwd:#判断输入的用户名是否存在于字典的键中

if login_password == name_pwd[login_name]:#判断存储用密码是否与字典中键的值一样

print('欢迎来到Python课堂(Welcome to PythonClass)!')

break

else:

print('用户名或密码错误(The name or password is error)!')

lock_name.append(login_name)#添加错误的用户名到锁定用户名的列表中

if lock_name.count(login_name) == 3:#判断错误的用户名是否等于三次

f_login.write(login_name+'

')#把用户追加到锁定用户的文件中

print('%s 该用户已被锁定(%s is locked)!'%(login_name,login_name))

break

else:

print('用户名或密码错误(The name or password is error)!')

lock_name.append(login_name)#添加错误的用户名到锁定用户名的列表中

if lock_name.count(login_name) == 3:#判断错误的用户名是否等于三次

f_login.write(login_name+'

')#把用户追加到锁定用户的文件中

print('%s 该用户已被锁定(%s is locked)!'%(login_name,login_name))

break

注:方法3改进版出现了重复代码。

方法3改进版的简化:

import os#导入os模块

if not os.path.exists('d:\consumer_login.txt'):#判断用户登录的文件是否存在

with open('d:\users\consumer_login.txt','w') as f_cons:#创建文件

f_cons.write('''{'zhangsan':'123','wangwu':'a324','lisi':'li123'}''')#写入数据

f_cons.close()

def login():#声明一个登录的函数

'''该函数主要用于用户登录,错误三次的用户被锁定,且不能再登录,用户名和密码存在文件中,登录成功将打印欢迎语句。'''

with open('d:\users\consumer_login.txt') as f_cons,

open('d:\users\locked_users.txt','a+') as f_lock:#打开两个文件

name_list = []#声明一个列表用于记录输入错误用户名的次数

consumers = eval(f_cons.read())#把文件内的数据读取到内存

f_lock.seek(0)#指定指针位置从0开始

lock_list = [i.strip() for i in f_lock.readlines()]#使用列表推导式把文件内的每行信息作为新列表的每个元素

for i in lock_list:#遍历列表

print('用户(%s)被锁定!'% i)

while True:

login_user = input('请输入用户名:').strip()

if login_user in lock_list:#判断输入的用户是否已经存在于锁定文件当中

print('用户(%s)已被锁定!'% login_user)

break

else:

login_pwd = input('请输入密码:').strip()

if (login_user,login_pwd) in consumers.items():#判断输入信息作为元祖的两个元素是否存在于字典的键值对中

print('欢迎来到购物商城!')

return login_user

else:

print('用户或者密码错误,请重新输入!')

name_list.append(login_user)#把输入错误的用户名添加到列表中

if name_list.count(login_user) == 3:#判断列表中本次输入的用户名是否出现三次

f_lock.write(login_user+'

')#把错误的用户名写入到文件中

print('用户(%s)已被锁定!'% login_user)

break

continue

login()#调用函数

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值