zoukankan      html  css  js  c++  java
  • 路飞学城14天集训营作业1—登陆认证

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

    初始版本:
     1 # -*- coding:utf-8 -*-
     2 # author: heimu
     3 
     4 import os
     5 
     6 user_dic = {"heimu_1":"111111","heimu_2":"222222","heimu_3":"333333"}
     7 lock_state = []
     8 count = 1
     9 if os.path.isfile("lock_state.txt"):
    10     with open("lock_state.txt","r") as f:
    11         lock_state = f.readline()
    12 while count <= 3:
    13     user_name_input = input("please input user name: ")
    14     passwords_input = input("please input six digital passwords: ")
    15     if user_name_input in lock_state:
    16         print("Sorry,%s account has been locked" % user_name_input)
    17         break
    18     elif user_name_input in user_dic and user_dic[user_name_input] == passwords_input:
    19         print("Welcome!%s" % user_name_input)
    20         break
    21     elif count < 3:
    22         print("Authentication failure! Please input again.")
    23     else:
    24         print("You have failed three times,the program is going to exit !!!")
    25         if user_name_input in user_dic:
    26             with open("lock_state.txt","a") as f:
    27                 f.write(user_name_input)
    28     count+=1
    View Code

    经过大王的悉心教诲之后的版本

     1 # -*- coding:utf-8 -*-
     2 # author: heimu
     3 
     4 import os
     5 
     6 user_dic = {"heimu_1":"111111","heimu_2":"222222","heimu_3":"333333"}
     7 lock_state = []         # 存储黑名单
     8 count = 1
     9 first_input_user = None     # 记录第一次输入的账户名
    10 is_same_user = True         # 标志位,用于判断三次输入的用户名是否相同
    11 
    12 if os.path.isfile("lock_state.txt"):        # 如果文件存在则打开文件
    13     with open("lock_state.txt","r") as f:   # 使用with语句,省去了每次得手动关闭文件
    14         for line in f:                      # 迭代f文件,line循环一次表示一行
    15             lock_state.append(line.strip()) # .strip 表示取出空格换行符之类的
    16 
    17 # 主函数
    18 while count <= 3:
    19     user_name_input = input("please input user name: ")
    20     passwords_input = input("please input six digital passwords: ")
    21     if user_name_input in lock_state:       # 如果账户存在于黑名单,直接退出
    22         exit("Sorry,%s account has been locked" % user_name_input)
    23     if not first_input_user:                # 如果为None,代表为第一次输入账户
    24         first_input_user = user_name_input
    25     if first_input_user != user_name_input: # 代表本次输入的用户名和第一次用户名不一样
    26         is_same_user = False                # 标志位设置为False,表示不再执行账户锁定操作
    27     if user_name_input in user_dic and user_dic[user_name_input] == passwords_input:
    28         print("Welcome!%s" % user_name_input)   # 登陆成功
    29         break
    30     else:
    31         print("Authentication failure! Please input again.")    # 失败错误少于三次,打印认证失败语句
    32     count+=1
    33 else:
    34     print("You have failed three times,the program is going to exit !!!")
    35     if is_same_user:        # 锁定用户
    36         if user_name_input in user_dic:     # 如果账户名存在于文件中,把账户名加入黑名单
    37             print("%s账户已经锁定" % user_name_input)
    38             with open("lock_state.txt","a") as f:
    39                 f.write(user_name_input+'
    ')
    40         else:
    41             pass                            # 如果账户名不在文件中,就算重复三次也不加入黑名单
    View Code
  • 相关阅读:
    软件设计师2006年11月下午试题6(C++ 状态模式)
    Delphi中使用RegExpr单元进行匹配与替换操作
    正则表达式中贪婪与懒惰匹配
    C++类属性算法equal和mismatch
    lazarus下使用正则表达式
    正则表达式在每行开头插入行号
    STL向量构造函数
    软件设计师2004年5月下午试题6(C++ 数组下标检测)
    演示STL双端队列的push_back和push_front函数
    用正则表达式改小写为大写
  • 原文地址:https://www.cnblogs.com/heimu24/p/8541360.html
Copyright © 2011-2022 走看看