python之编写登陆接口(第一天)
作业:编写登陆接口
- 输入用户名密码
- 认证成功后显示欢迎信息
- 输错三次后锁定
针对此实例写了有二种类型的脚本,略有不同,具体如下:
帐号文件account.txt内容如下:
sam 123
david 12
kevin 123
lin 12
tailen 123
jack 12
锁文件account_lock.txt默认为空
一、只针对帐号文件里的用户进行判断并锁定,针对用户和密码各有三次错误重试机会。
1、流程图如下:

代码如下:
#!/usr/bin/python27
#_*_ coding:utf-8 _*_ import sys,os,getpass os.system('clear')
i = 0
while i < 3: #只要用户登录异常不超过3次就不断循环
name = raw_input("请输入用户名:") lock_file = open('account_lock.txt','r+') #当用户输入用户名后,打开LOCK 文件 以检查是否此用户已经LOCK了
lock_list = lock_file.readlines() for lock_line in lock_list: #循环LOCK文件
lock_line = lock_line.strip('\n') #去掉换行符
if name == lock_line: #如果LOCK了就直接退出
sys.exit('用户 %s 已经被锁定,退出' % name) user_file = open('account.txt','r') #打开帐号文件
user_list = user_file.readlines()
for user_line in user_list: #对帐号文件进行遍历
(user,password) = user_line.strip('\n').split() #分别获取帐号和密码信息
if name == user: #如用户名正常匹配
j = 0
while j < 3: #只要用户密码异常不超过3次就不断循环
passwd = getpass.getpass('请输入密码:') #输入隐藏密码
if passwd == password: #密码正确,提示欢迎登录
print('欢迎登录管理平台,用户%s' % name)
sys.exit(0) #正常退出
else:
if j != 2: #j=2时,是最后一次机会,不用在提示还剩余0次机会了
print('用户 %s 密码错误,请重新输入,还有 %d 次机会' % (name,2 - j))
j += 1 #密码输入错误后,循环值增加1
else:
lock_file.write(name + '\n') #密码输入三次错误后,将该用户追加到LOCK文件
sys.exit('用户 %s 达到最大登录次数,将被锁定并退出' % name)
else:
pass #当用户没匹配时,跳过并继续循环
else:
if i != 2: #i=2时,是最后一次机会,不用在提示还剩余0次机会了
print('用户 %s 不存在,请重新输入,还有 %d 次机会' % (name,2 - i))
i += 1 #当用户输入错误时,循环值增加1
else:
sys.exit('用户 %s 不存在,退出' % name) #用户输入三次错误后,异常退出 lock_file.close() #关闭LOCK文件
user_file.close() #关闭帐号文件
二、针对帐号文件里的不存在的用户也可以进行判断并锁定,针对用户和密码共有三次错误重试机会
代码如下:
#_*_ coding:utf-8 _*_
import sys,os,getpass
os.system('clear')
retry_limit = 3
retry_count = 0
account_file = 'account.txt'
lock_file = 'account_lock.txt'
while retry_count < retry_limit: #只要重试不超过3次就不断循环
username = raw_input('\033[31;43mUsername:\033[0m')
username = username.strip()
lock_check = open(lock_file) #当用户输入用户名后,打开LOCK 文件 以检查是否此用户已经LOCK了
for line in lock_check.readlines(): #循环LOCK文件
if username == line.strip('\n'): #去掉换行符
sys.exit('\033[35mUser %s is locked!!!\033[0m' % username) #如果LOCK了就直接退出
password = raw_input('\033[32;41mPassword:\033[0m') #输入密码
f = open(account_file,'r') #打开帐号文件
match_flag = False # 默认为Flase,如果用户match 上了,就设置为 True
for line in f.readlines():
user,passwd = line.strip('\n').split() #去掉每行多余的\n并把这一行按空格分成两列,分别赋值为user,passwd两个变量
if username == user and password == passwd: #判断用户名和密码是否都相等
print('hello, %s !!' % username)
match_flag = True #相等就把循环外的match_flag变量改为了True
break #然后就不用继续循环了,直接 跳出,因为已经match上了
f.close()
if match_flag == False: #如果match_flag还为False,代表上面的循环中跟本就没有match上用户名和密码,所以需要继续循环
print('sorry,%s is unmatched' % username)
retry_count += 1 #计数器加1
else:
print('wlecome login my learning system!')
break #用户成功登录,退出脚本
else:
print("you account %s is locked!!!" % username)
g = open(lock_file,'a')
g.write(username) #被锁用户追加到用户锁文件
g.write('\n')
g.close()
python之编写登陆接口(第一天)的更多相关文章
- python 作业 编写登陆接口
# -*- coding:utf-8 -*-import os,sysfor i in range(3):#进行3次循环 blacklist = open(r"C:\Users\Pc4\De ...
- Python之编写登陆接口
1.输入用户名密码: 2.认证成功后显示欢迎信息: 3.错误三次后,账号被锁定. 账号文件:user.txt 锁定文件:locked.txt 流程图如下: # -*- coding:utf-8 -*- ...
- python 之编写登陆接口
基础需求: 让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后退出程序 升级需求: 可以支持多个用户登录 (提示,通过列表存多个账户信息) 用户3次认证失败后,退出程序,再次启动程序尝试登录时, ...
- Python学习第一天-编写登陆接口
编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 帐号文件user.txt内容如下: qaz 123qwe 12345qweqwr 12321424...... 锁文件user_l ...
- 使用 Python 编写登陆接口
# 使用 Python 编写登陆接口# Create Date: 2017.10.31 Tuesday# Author: Eric Zhao# -*- coding:utf-8 -*-'''编写登陆接 ...
- Python学习之编写登陆接口(Day1,作业一)
作业一:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定(下次登陆还是锁定) 知识点:while循环,for循环,文件操作,if判断,列表操作 思路: 1.登陆,三次登陆失败,锁定 ...
- Python之编写登录接口
作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 帐号文件account.txt内容如下: liuyueming 123zhangsan 123lisi 123 锁文件acc ...
- day1作业:编写登陆接口
作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 思路:要求是编写登陆接口,那么要有一个存放用户信息的模块:三次后锁定,要有一个存放锁定用户信息的模块:我们知 ...
- day1作业一:编写登陆接口
作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 Readme: (1)提示用户输入用户名: (2)用户名验证,验证是否已经锁定: (3)是否锁定:已锁定告诉 ...
随机推荐
- Android四大组件之actiivity
1.Acitivity Activity是Android一个非常重要的用户接口(四大组件之一),是可见的,主要是用户和应用程序之间进行交互的接口.在每个Activity中都可以放很多控件,所以也可以把 ...
- python 安装nltk,使用(英文分词处理,词干化等)(Green VPN)
安装pip命令之后: sudo pip install -U pyyaml nltk import nltk nltk.download() 等待ing 目前访问不了,故使用Green VPN htt ...
- Oracle EBS - AOL
AOL: (Path: /u43/dev6/interface/aol) 1. Goto system administrator response 2. View -> Request (Sa ...
- poj2388-Who's in the Middle(排序)
水题:求中位数. #include<iostream> #include<algorithm> using namespace std; int main(){ int n; ...
- C#转摘
尽量用Func和lambda解决函数变量问题,用var, dynamic来解决动态变量问题
- 分析-eclipse已经导入jar包了,但还是出现classNotFound异常
场景:分析-eclipse已经导入jar包了,但还是出现classNotFound异常 分析--eclipse已经导入jar包了,但还是出现classNotFound错误 最近在做一个web项目时,由 ...
- 几何服务,cut功能,输入要素target(修改前)内容。
几何服务,cut功能测试,输入要素target(修改前)内容. {"geometryType":"esriGeometryPolyline","geo ...
- 给Source Insight做个外挂系列之二--将本地代码注入到Source Insight进程
上一篇文章介绍了如何发现正在运行的“Source Insight”窗口,本篇将介绍“TabSiPlus”是如何进行代码注入的.Windows 9x以后的Windows操作系统都对进程空间进行了严格的保 ...
- Ubuntu 16.04 几个国内更新源
http://blog.csdn.net/paincupid/article/details/52895676 如何更改源 1/ 在修改source.list前,最好先备份一份 执行备份命令 sudo ...
- CentOS7.2 编译安装SVN1.9.5客户端
背景 原来想在Linux机上开Samba共享,在Windows机上把工作目录映射到网络驱动器,用Source Insight编辑代码后就不用来回同步文件了. 然而在使用中发现,Windows机用的SV ...