老男孩Day1 作业 (用户名密码验证)
来源:互联网 发布:中山大学网络教育2017 编辑:程序博客网 时间:2024/06/06 00:59
#!/usr/bin/env python
#coding=utf-8import getpass
import re
'''Day1作业,V1.0,这是一个验证用户名、密码的程序,如果输入密码连续3次错误,则帐号被锁定。
被锁定的帐号是永久锁定,重启程序无法解锁'''
#假设预先创建了用于用户验证的存贮用户名,密码文件。文件格式为: username,password,x (其中x为0-3,表示用户状态,
#每输入一次密码错误,x+1,3表未帐号已锁定)
#要求指定用户验证文件的路径
user_db = raw_input('''Please specify the user DB, for example: /tmp/passwd
User DB: ''')
file = open(user_db,'r+')
auth_str = file.readlines()
#获取文件总长
total_size = file.tell()
file.seek(0)
current_size = file.tell()
user_list = []
#获得一个用户列表
while current_size < total_size:
user_str = file.readline()
user_list.append(user_str.split(',')[0])
current_size = file.tell()
#print user_list
while True:
#预留手动退出机制
Exit = raw_input('Proceed with authentication? y/n :')
if not Exit == 'y':
break
#开始认证操作流程
username = raw_input('Username: ')
if not username in user_list:
print "invalid username."
break
elif username in user_list:
for i in auth_str:
#找出该用户名打头的行
if re.match(username,i):
user_line = i
#找到该用户信息在列表中的索引号
list_num = auth_str.index(user_line)
#检查该用户帐号是否已被锁定
if int(auth_str[list_num][-2]) == 3:
print 'Your account has been disabled'
break
elif int(auth_str[list_num][-2]) < 3:
password = getpass.getpass('Password: ')
#将用户名密码合成可iter的元组,以便逗号连接成字串
credential = ','.join((username, password))
if credential == auth_str[list_num][0:-3]:
#认证成功后,刷新字串中的用户状态信息到零
auth_str[list_num] = auth_str[list_num][0:-3] + ',' + str(0) + '\n'
print '''Congratulations!
Your username and password are correct!'''
break
else:
#将用户状态信息转成int,并+1
lock = int(auth_str[list_num][-2]) + 1
#更新字串中的用户状态信息
auth_str[list_num] = auth_str[list_num][0:-3] + ',' + str(lock) + '\n'
print 'Your password is wrong.'
print 'You can try %d time(s), typing wrong password constantly will cause your account be disabled.' %(3 - int(lock))
#重新以写方式打开,准备覆盖原文件,否则是追加模式
file = open(user_db,'w+')
#覆盖原文件,以更新用户状态信息,其它信息保持不变
file.writelines(auth_str)
#关闭文件,程序终止
file.close()
0 0
- 老男孩Day1 作业 (用户名密码验证)
- 老男孩python14期,day1
- [python] 老男孩 作业二的解答
- Nodejs:Passport验证用户名密码(不完全)
- 验证用户名和密码
- 用户名密码验证程序
- 用户名和密码验证
- JS验证用户名密码
- HiveServer2用户名密码验证
- HiveServer2用户名密码验证
- 登陆用户名密码验证
- jsp 用户名、密码验证
- 用户名密码验证
- 用户名密码判断验证
- 老男孩
- 老男孩
- 《老男孩》
- 老男孩
- BCD码详解
- 怎么将webApp打包上传到App Store
- java-基础-变量
- nyoj 括号配对问题
- 归并(Merge Sort)排序算法
- 老男孩Day1 作业 (用户名密码验证)
- android跳转微信指定公众号界面
- 使用 STL vector中的注意事项以及重写vector时的注意事项
- Shell 学习(二) 关键字:数据类型 字符串
- JSON模块
- 轩辕剑在线(swdol)3D模型浏览器
- 根据前序和中序的遍历序列重建二叉树
- 小满足
- struts2拦截器详解