zoukankan      html  css  js  c++  java
  • 登录接口

    需求:

    基础需求:

    • 让用户输入用户名密码
    • 认证成功后显示欢迎信息
    • 输错三次后退出程序

    升级需求:

    • 可以支持多个用户登录 (提示,通过列表存多个账户信息)
    • 用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)

     

    代码:

    1.基础需求实现

    简单需求实现起来没有什么太大的难度,主要是合理使用循环退出条件

     1 # 基础需求:
     2 _user = "wyb"
     3 _pwd = "666"
     4 
     5 count = 0
     6 while count < 3:
     7     # 让用户输入用户名密码
     8     user = input("username: ")
     9     pwd = input("password: ")
    10     # 认证成功后显示欢迎信息
    11     if user == _user and pwd == _pwd:
    12         print("Welcome, %s!" % user)
    13         break
    14     # 输入错误重新输入
    15     else:
    16         print("用户名或密码错误!请重新输入!")
    17     count += 1
    18 else:
    19     print("你已经尝试了3次!不能再试了!")

    2.升级需求实现

    升级需求相比简单需求在难度上大大提升了,在使用列表的同时也要注意用户名和密码如何对应,并且需求还涉及到了文件读取写入内容

    我的解决方案:  把锁定用户和查找用户是否已经锁定写成函数以简化程序内部的逻辑,使用时直接调用,程序的流程图:

     1 users = ["wyb", "zl", "xxx", "abc"]
     2 pwds = ["123456", "666", "xyzmnopq", "rst@1z"]
     3 
     4 
     5 # 锁定用户
     6 def lock_user(user):
     7     with open("lock_user.txt", "a+") as f:
     8         user = user + "
    "
     9         f.write(user)
    10 
    11 
    12 # 查找用户是否锁定
    13 def find_lock(user):
    14     with open("lock_user.txt", "r") as f:
    15         for line in f:
    16             if user == line.strip('
    '):
    17                 return True
    18         return False
    19 
    20 
    21 while True:
    22     # 让用户输入用户名
    23     username = input("username: ")
    24 
    25     # 判断用户名是否合法并求用户索引
    26     if username in users:
    27         user_index = users.index(username)
    28     else:
    29         print("请使用正确的用户名登陆!")
    30         continue
    31 
    32     # 判断用户是否已锁定
    33     if find_lock(username):
    34         print("你的账号已被锁定,现在不能登录,请使用其他用户登录")
    35         continue
    36 
    37     # 用户名对应的密码
    38     _pwd = pwds[user_index]
    39     # 一个用户输入密码的次数最多为3次
    40     for i in range(3):
    41         # 用户输入密码
    42         pwd = input("password: ")
    43         if pwd == _pwd:
    44             print("Welcome, %s!" % username)
    45             exit()
    46         else:
    47             if i != 2:
    48                 print("the password is wrong! please try again!")
    49     else:
    50         print("连续3次认证失败,已锁定账号!")
    51         lock_user(username)
    52         break

    3.最后版本

    下面代码的流程和上面一个代码的流程是一样的,但是使用到了字典来存储用户名和密码,使得操作的时候更加的方便,并且一开始用户名和密码是存储在文件中,通过读取文件然后循环文件将文件中的内容写入字典中

     1 # __author__ = "wyb"
     2 # date: 2018/4/13
     3 
     4 # 打开文件将文件中的用户名和密码存入字典中
     5 use_pwd = {}
     6 with open("account.txt", "r") as f:
     7     for line in f:
     8         u, p = line.split(',')
     9         use_pwd[u] = p.strip()
    10 
    11 
    12 # 锁定用户
    13 def lock_user(user):
    14     with open("lock_user.txt", "a+") as f:
    15         user = user + "
    "
    16         f.write(user)
    17 
    18 
    19 # 查找用户是否锁定
    20 def find_lock(user):
    21     with open("lock_user.txt", "r") as f:
    22         for l in f:
    23             if user == l.strip('
    '):
    24                 return True
    25         return False
    26 
    27 
    28 while True:
    29     # 让用户输入用户名
    30     username = input("username: ").strip()
    31 
    32     # 判断用户是否在字典中
    33     if username in use_pwd.keys():
    34         # 判断用户是否已被锁定
    35         if find_lock(username):
    36             print("用户已锁定,请选择其他用户登录")
    37             continue
    38         else:
    39             for i in range(3):
    40                 password = input("password: ").strip()
    41                 # 密码正确
    42                 if password == use_pwd[username]:
    43                     print("welcome %s" % username)
    44                     exit()
    45                 # 密码错误
    46                 else:
    47                     print("Password is wrong! Enter again!")
    48                     continue
    49             # 输出3次锁定账号
    50             print("你已经输出密码3次,将锁定账号!")
    51             lock_user(username)
    52             break
    53     # 输入用户名错误
    54     else:
    55         print("用户名不正确,请重新输入")
    56         continue
  • 相关阅读:
    Hibernate保存方式的区别
    活动图
    Apache新增站点配置
    Apache安装
    360度全方位沟通向上沟通
    时间转换
    PostgreSQL 9.2中将引入生成JSON数据功能
    Delphi 读取dbgrid中的选中一行的代码及定位函数
    彻底解决Delphi的DBGrid控件鼠标滚轮问题(转)
    DB2与PostgreSQL开发的异同
  • 原文地址:https://www.cnblogs.com/wyb666/p/8734639.html
Copyright © 2011-2022 走看看