模拟登陆
① 编写登陆接口 要求:
-
模拟登陆:
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