编写登陆认证程序

题目要求:
 让用户输入用户名密码  认证成功后显示欢迎信息  输错三次后退出程序  可以支持多个用户登录 (提示,通过列表存多个账户信息)  用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)

根据题目要求,先创建两个TXT文件。
一个存放用户信息
一个存放黑名单
需要用到的知识点:
  • 循环.
  • 字典,列表.
  • 打开文件,写入文件.
  • 了解文件处理中'a'和'w'的区别.
  • 'a'是附加写操作,'w'写入时会刷新文件中的内容.
  • 'r+'是读写模式,没有的话会报错,'w+'写读模式,没有会创建新的.

扩展项:(知识盲区,未写入代码)

  • 可以把登陆的次数写入文件,可以避免利用返回BUG来多次尝试密码(文件需要刷新)
  •  1 #-*-coding:utf-8-*-
     2 v = open("admin_data/break_number")   #黑名单
     3 f = open("admin_data/user")           #用户文件,使用字典方式,并准备状态栏,为以后其他用途做准备
     4 data = eval(f.read())                 #用户文件赋变量,并去掉引号
     5 break_data = v.read()                 #黑名单赋变量
     6 f.close()
     7 while True:
     8     username = input(">>>请输入用户名:").strip()
     9     password = input(">>>请输入密码:").strip()
    10     if username in break_data:      #判断用户是否在黑名单
    11         print("账号已冻结,请联系工作人员")
    12         exit()
    13     if username in data:       #锁定当前输入用户
    14         number_of_times = 2  # 定义用户允许错误输入几次密码(不包括第一次)
    15         while True:
    16             if  password == data[username][0]:      #找到相应用户名的密码,判断是否正确
    17                 print(">>>登陆成功<<<")
    18                 exit()
    19             elif not number_of_times:      #次数减为 O 时,为真
    20                 print("密码错误已超过3次,账号已冻结")
    21                 f = open("admin_data/break_number", "a")        #打开黑名单,并使用追加的方式。
    22                 f.write(str(username) + '\n')       #将错误三次的用户锁进进黑名单。
    23                 f.close()
    24                 exit()      #锁定账号后退出系统
    25             elif password.upper() == 'B':       #返回上次循环,重新输入账户密码
    26                 break
    27             else:
    28                 print("----密码错误,还有%d次机会----" % number_of_times )
    29                 number_of_times -= 1        #每次递减1
    30                 print("按B更换用户名或者重新输入密码:")
    31                 password = input(">>>").strip()   #再次输入密码
    32     else:print("用户名不存在")
    View Code

     

posted @ 2018-04-10 21:19  7号的开发之路  阅读(260)  评论(0)    收藏  举报