模拟登陆

① 编写登陆接口 要求:

  • 模拟登陆:

    1. 用户输入帐号密码进行登陆

    2. 用户信息保存在文件内

    3. 用户密码输入错误三次后锁定用户

 

 

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "chenhao"
# Email: 312779641@qq.com
# Date: 2016/12/15

# -*-      运行环境python3.5.2   -*-
#user_information、locked_information、login_interface.py三个文件拷贝到同一级目录
#授权:chmod 755  login_interface.py
#执行:python  login_interface.py

####记录可登录用户、密码信息文件user_information####
# Dave    dave123
# John    john123
# Luffy    luffy123
####记录被锁定的用户信息文件locked_information####
# lzl
# Alex
import getpass,json
Count = 1                           #设置计数器,统计下面第一个while大循环的次数 赋值变量Count,初始值为1
Last_user = ""                     #针对上次登录的用户名进行记录,如果连续三次登录错误的用户名是一致的话才进行锁定
                                    #赋值变量Last_user,初始值为空
Match_count = 1                     #统计Last_user与上次登录的用户名匹配的次数,变量Match_count初始值为1

while True:
    Locked = open("locked_information", "r")  # 读取被锁定用户名信息文件
    User_pwd = open("user_information", "r")  # 读取可登录的用户、密码信息文件
    User = input("Please enter the login username:")            #提示用户输入登录用户名并赋值给User
    Passwd = getpass.getpass("Please enter login password:")              # 提示用户输入登录密码并赋值给Passwd

    if len(User) == 0:
        print("Error:Enter the user is null! please try again..")
        continue
    if Last_user == User:           #if语句判断,本次登录的用户名跟上次登录的用户名是否匹配
        Match_count +=1             #如果匹配成功,表示两次连续登录的用户名一致,Match_count计数加1
    else:                           #如果匹配失败,Match_count计数恢复为初始值1
        Match_count = 1

    Re_count = 3 - Count            #设置变量Re_count为还进行登录的剩余次数,判断登录失败后会用到


    for Blacklist in Locked.readlines():            #for循环读取被锁定用户名,生成变量Blacklist
        Blacklist = Blacklist.strip("\n")           #对变量Blacklist进行去换行符操作
        if User == Blacklist:                   #判断如果输入的用户名在Blacklist中,则提示用户被锁定并退出登录
            print ("Login username ",User," is locked, login fails...")
            exit()                                #退出程序

    for i_f_m in User_pwd.readlines():              #for循环读取可登录用户、密码信息文件,赋值变量i_f_m
        i_f_m = (i_f_m.strip("\n")).split()             #对变量i_f_m进行先去换行符,然后以空格符分割为列表的操作
        if User == i_f_m[0] and Passwd == i_f_m[1]:     #对登录用户名和密码进行匹配,两者都匹配成功则显示恭喜登陆成功
            print ("Congratulations to login successful!")
            exit()                                #退出程序
            print(User,Passwd)

    else:
        if Re_count > 0 :    #验证上面for循环匹配失败并且剩余登录次数大于0后,提示错误和剩余次数
                             #如果去掉if判断,则在匹配用户锁定时打印信息重合,放到下面while循环里面则会添加多余输出
            print("Error: The username and password mistate!  You can also try", Re_count, "times...")

        while Re_count > 0 :    #while循环语句,重试登录次数大于0时,提示用户是否还要继续登陆
            If_cont = input("Whether or not to continue to login?(Y/N):")
            if If_cont == "Y":                  #匹配字符Y
                break                           #跳出当前while,重新输入用户名密码
            elif If_cont == "N":                #匹配字符N
                print ("-- Bye --")
                exit()                           #终止程序
            else:                               #字符输入错误,重新提示输入正确的字符Y 和 N
                print("*        Please enter 【Y】 or 【N】        *")
                continue                        #跳出当前循环执行下次循环
        else:                   #while循环语句,当用户重试登录次数为0时,执行下面语句
            if Match_count == 3:                #连续三次输入的用户名一致,把用户名加入到黑名单
                Locked = open("locked_information", "a")    #对文件locked_information追加写操作
                Locked.write(User + "\n")       #把用户名写入到黑名单并执行下换行符
                print("Error: The username and password mistate! The current user ",User," is locked...")
                break                           #提示锁定用户并退出程序
            else:                               #连续三次输入的用户名不一致,提示用户名密码错误,不进行锁定
                print ("Error: The username and password mistate! Bye-bye!")
                break                          #退出程序

    Count += 1                                   #循环结束,Count计数加1
    Last_user = User                            #循环结束,Last_userc重新赋值
Locked.close()
User_pwd.close()

 

readme

# 这是一个模拟真实用户登录系统的程序


### 实现效果:
* user_information文件记录了可登录用户名和密码,每次登录只有完全匹配文件中的用户名和密码才能登录
* locked_information文件记录了被锁定的用户,每次登录输入被锁定的用户,会提示当前用户被锁定,并退出
* 用户连续三次登录失败且三次输入的用户名一样,会显示当前用户被锁定,退出程序并且把用户名记录到locked_information
* 用户连续三次登录失败,但三次的用户名不一样,提示登录失败,退出程序用户名不锁定
* 前两次登录失败时可选择是否还要继续登录,登录失败时会显示剩余登录次数


### 运行环境:
* Python3.0+ 最佳Python3.5.2


### 目录结构:

    Day1
    ├── 登录接口
    │   ├── day1_login_interface.py
    │   └── locked_information
    │   ├── user_information
    │   ├── login_interface.png
    │   └── readme

### linux 运行说明:

* user_information、locked_information、day1_login_interface.py拷贝到同一级目录下
* 加执行权限 chmod 755  day1_login_interface.py
* 执行程序   python  day1_login_interface.py

 

posted @ 2016-12-15 15:52  chenhao6  阅读(646)  评论(0编辑  收藏  举报