作业之三次登陆锁定用户

作业要求如下:

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('\n')
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+'\n')#把用户追加到锁定用户的文件中
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+'\n')#把用户追加到锁定用户的文件中
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+'\n')#把错误的用户名写入到文件中
print('用户(%s)已被锁定!'% login_user)
break
continue
login()#调用函数

Python作业之三次登陆锁定用户的更多相关文章

  1. python作业:模拟登陆(第一周)

    模拟登陆作业需求: 1. 用户输入帐号密码进行登陆 2. 用户信息保存在文件内 3. 用户密码输入错误三次后锁定用户 额外实现功能: 1.提示输入错误次数 2.输入已锁定用户会提示 3.用户不存在会提 ...

  2. [Python3.x]多次登陆锁定用户

    要求:输入用户名,密码认证成功显示欢迎信息输入错误三次后锁定用户Readme: 1.account.txt是存放用户id及密码的文件 2.account_loc.txt是存放被锁定的用户id的文档,默 ...

  3. Python - 购物车代码 (账户登陆,用户个人清单存取,重要信息高亮显示)

    需要掌握open函数. 清单存取时,需要注意编码问题,直接在读取和存储时加上encoding = 'utf - 8' 可以解决gbk - unicode转化时出现的乱码问题. 码农一定要坚强,这份代码 ...

  4. Python作业模拟登陆(第一周)

    模拟登陆:1. 用户输入帐号密码进行登陆2. 用户信息保存在文件内3. 用户密码输入错误三次后锁定用户 思路: 1. 用户名密码文件为passwd,锁定用户文件为lock 2. 用户输入账号密码采用i ...

  5. python 3.5 用户登录验证和输入三次密码锁定用户

    #!/usr/bin/env python #encoding: utf-8 #登录程序,输入用户和密码输出欢迎信息,输入错误三次锁定用户,不让登录 import sys print (''' 欢迎登 ...

  6. Centos 用户登录失败N次后锁定用户禁止登陆

    针对linux上的用户,如果用户连续3次登录失败,就锁定该用户,几分钟后该用户再自动解锁 Linux有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值,则锁 ...

  7. Centos7下用户登录失败N次后锁定用户禁止登陆的方法

    前言 针对linux上的用户,如果用户连续3次登录失败,就锁定该用户,几分钟后该用户再自动解锁.Linux有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值 ...

  8. Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证

    Python tkinter 实现简单登陆注册 最终效果 开始界面 ​ 注册 登陆 ​ 源码 login.py # encoding=utf-8 from tkinter import * from ...

  9. python 循环和file操作实现用户密码输错三次将用户锁定

    一.需求编写登录接口1.输入用户名密码2.认证成功后显示欢迎信息3.输错三次后锁定 二.简单思路登录,三次密码输入错误锁定用户1.用户信息文件:存放用户名和密码2.黑名单文件:将输入三次错误的用户加入 ...

随机推荐

  1. 关于团购VPS的事情报告

    作者 玄魂   2017-08-11 玄魂工作室-玄魂 玄魂工作室首先要抱歉,之前的说的继续组织大家购买vps的事情,不会再组织了.原因有以下几个:1)因为人多,需求各不相同,不好协调.2)服务都是购 ...

  2. Python-基础学习-Day1

    1 Python介绍 1.1 Python 是一门什么样的语言? python是一门动态解释性的强类型定义语言. 编译型的特点:可一致性差,运行速度快. 解释型的特点:边执行边解释,速度慢 1.2 P ...

  3. restful架构风格设计准则(四)资源表示和资源访问

    读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者! 一.资源表示 1.资源表示:使用 单数 vs. 复数 如果一个URL所对 ...

  4. ELK学习总结(2-4)bulk 批量操作-实现多个文档的创建、索引、更新和删除

    bulk 批量操作-实现多个文档的创建.索引.更新和删除 ----------------------------------------------------------------------- ...

  5. 【52ABP实战教程】0.1-- Devops如何用VSTS持续集成到Github仓库!

    工欲善其事,必先利其器.在开始正式的教程之前我们先来聊聊准备工作. 管理工具会VSTS. 代码管理会用GITHUB. 服务器会用Azure. 所有的东西都是利用现有服务.不会说自己从虚拟机开始玩.我们 ...

  6. python当中的 可迭代对象 迭代器

    学习python有一段时间了,在学习过程中遇到很多难理解的东西,做一下总结,希望能对其他朋友有一些帮助. 完全是个人理解,难免有错,欢迎其他大神朋友们批评指正. 1 迭代 什么是迭代呢??我们可以这样 ...

  7. Opencv出现“_pFirstBlock == pHead”错误的解决方法

    先说结论: opencv链接库使用错误. 1,确认VS工程属性中,opencv的链接库路径和版本正确. VS2013应该使用vc12目录,VS2012对应vc11目录.debug版和release版要 ...

  8. [洛谷P1197/BZOJ1015][JSOI2008]星球大战Starwar - 并查集,离线,联通块

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  9. (第一章)对程序员来说CPU是什么

    这几天,看到一本书,<程序是怎么跑起来的>,觉得之前都没有完整的看完一本书,现在要从这本书开始,慢慢的培养自己写读书笔记的习惯,不能度过去就忘了. 学习是一个螺旋上升的过程,不要指望一下子 ...

  10. css常见属性

    css常见属性 1.颜色属性 1.1 color属性定义文本的颜色 1.2 color:green 1.3 color:#ff6600 可简写为#f60 1.4 color:rgb(255,255,2 ...