实验名称:模拟登陆
实验要求:
输入用户名密码
认证成功显示欢迎信息
输错三次锁定用户
思路:
用户输入username
判断username是否为真(文件)。
否:提示用户不存在;是:判断是否锁定(文件)
如果用户锁定提示:该用户已锁定;没锁定就输入密码
循环三次(判断密码是否正确)
密码超过三次不正确,就写入锁文件
流程图:
<a href="https://s1.51cto.com/oss/201711/02/3f9b32d65712b0a8ed38ee85b603dd44.png-wh_500x0-wm_3-wmp_4-s_1835019730.png" target="_blank"></a>
代码实现:
#!/usr/bin/env python
#Author:Li QW
#加载sys模块
import sys
#指定文件路径,这里用的是绝对路径
user_word='C:/Users/Administrator/Desktop/open.txt' #用户文件
close_word='C:/Users/Administrator/Desktop/close.txt' #锁用户文件
f=open(user_word,'r') #打开文件
user_info=f.read() # 读取文件
f.close() #读取之后关闭文件
user_lis= user_info.split("#") #以井号作为分隔符
dict = {} #导入字典
for item in user_lis: #赋给变量item
item_list=item.split(':') #以冒号作为分隔符
dict[item_list[0]]=item_list[-1]
count = 0 #计数器的作用
username = input("Input username:") #输入用户名
if username in dict:
l=open(close_word,'r')
black_info = l.read()
l.close()
black_list = black_info.split('#')
lock_dict = {}
for items in black_list:
items_list = items.split(':')
lock_dict[items_list[0]]=items_list[-1] #这里注意,用-1 读最后一行,我之前写1 ,掉进坑里爬不起来了。写1,当文件为空时,它会读取不到这个参数就会报错。
if username in lock_dict: #如果在close.txt文件有这个用户,则提示该用户已锁!
print("username close...")
sys.exit() #退出
else:
while count <3: #输入次数小于三次继续循环
password = input("Input password:") #输入密码
if password == dict[username]: #判断密码是否正确
print("Welcome user login !")
sys.exit()
else:
count +=1 #错误累加一次 (相当于count = count +1)
if count ==3: #写错三次记录到close.txt文件中
l=open(close_word,'a')
l.write("#%s:%s"%(username,dict[username]))
print("用户输错三次被锁定...")
sys.exit() #退出
else: #提示还有几次机会
print('您还有%s次机会'%(3-count))
else: #用户不存在打印
print("NO usernames...")
附带报错内容:
<a href="https://s4.51cto.com/oss/201711/02/f2c848760cbee0b07edaefd26e17d5b5.png-wh_500x0-wm_3-wmp_4-s_4222221847.png" target="_blank"></a>
心得体悟:
写代码容易,排错难!做事要尽可能的考虑周全。走过的坑多了,自然就会熟悉。
本文转自白羊IT51CTO博客,原文链接:http://blog.51cto.com/000011211684/1978403,如需转载请自行联系原作者