第一次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