第一次Python作业例子
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
用户登陆功能实例
1、获取db文件中所有的用户信息
2、比较用户信息
如果用户名不存在,则直接退出
如果用户名存在
检测密码,如果密码存在,则提示登陆成功,并将登陆错误次数重置为 0 ,修改内存中的字典中记录的登陆错误次数。(并写入文件)
如果密码不存在
修改内存中的字典中记录的登陆错误次数
将最新的登陆错误次数和对应用户信息写入文件
"""
# 读取用户信息到 user_info_list 中
read = file('db','r')
user_info_list = read.readlines()
read.close()
# 处理 user_info_list,以便之后的用户名和密码比较
# 处理后的结果: user_info_dict = {'alex': {'pwd': '112233', 'times': 0}, 'eric': {'pwd': '111111', 'times': 0}}
user_info_dict = {}
for item in user_info_list:
user_info = item.split('|')
user_info_dict[user_info[0]] = {'pwd': user_info[1], 'times': int(user_info[2].strip())}
while True:
username = raw_input('请输入用户名:')
# 用户名不存在
if username not in user_info_dict.keys():
print '用户名不存在,请重新输入!'
# 用户名存在
else:
# 判断登陆次数
if user_info_dict[username]['times'] > 3:
print '账户已经冻结,请联系管理员!'
break
else:
pwd = raw_input('请输入密码:')
if user_info_dict[username]['pwd'] == pwd:
# 如果登陆成功,将登陆次数重置为 0
user_info_dict[username]['times'] = 0
print '恭喜您 %s,登陆成功' % username
else:
# 如果登陆失败,将登陆次数加一
user_info_dict[username]['times'] += 1
# 将最新的登陆次数写入文件
temp_list = []
for key, value in user_info_dict.items():
temp = "%s|%s|%d" % (key, value['pwd'], value['times'])
temp_list.append(temp)
temp_str = "\n".join(temp_list)
w_obj = file('db', 'w')
w_obj.write(temp_str)
w_obj.flush()
w_obj.close()
db文件内容:
tony|123456|1
alex|112233|4
eric|111111|0
susan|111111|1
总结思路:当有多个列表要转成一个列表时,先讲多个列表转换成字符串,然后将字符串追加(append方法)到定义好的空列表中
另外一种实现方法:
#!/usr/bin/env python
# -*- coding:utf8 -*-
with open('db','rb') as userinfo:
user_list=userinfo.readlines()
#print user_list
user_dic = {}
for list in user_list:
user_info = list.strip().split('|')
user_dic[user_info[0]]={'password':user_info[1],'status':user_info[2]}
#这里的难点就是字典的构造,将用户名和密码以及登录状态(0代表正常,1代表锁定)构造为字典
while True:
flag=0
User = raw_input("请输入用户名:")
if User not in user_dic.keys():
continue
else:
if int(user_dic[User]['status']) == 1:
print "用户 %s 被锁定,请联系管理员!" % User
else:
while True:
Password=raw_input("请输入密码:")
if Password == user_dic[User]['password']:
print "%s 登录成功!" % User
flag=0
break
else:
flag+=1
if flag == 3:
user_dic[User]['status']=1
print "%s 用户被锁定,请联系管理员" % User
user = []
for k,v in user_dic.items():#遍历字典中的元素
user_Info="%s|%s|%s" %(k,v['password'],v['status'])#拼接字符串
user.append(user_Info)#将拼接的字符追加到空列表中
user_str = "\n".join(user)#将列表中的内容按照"\n"进行分割
#print user_str
with open('db','w') as obj:
obj.write(user_str)
obj.flush()
break
db文件内容:
tony|123456|0
alex|112233|0
eric|111111|0
sany|111111|1
转载于:https://blog.51cto.com/ucode/1717221