README
1 # README.md # 2 3 day001-work-1 4 5 @南非波波 6 7 功能实现:登录接口 8 9 流程图: 10 11 ![](http://i.imgur.com/61eFd0u.jpg) 12 13 程序实现: 14 15 1.设置功能函数: 16 Welcome(LoginFlag):根据LoginFlage返回不同的信息 17 UserBlack():黑名单列表判断UsersName是否被锁定 18 UserBlackAdd(Users):添加UsersName到黑名单 19 Login(Passwd):用户登录函数 20 2.函数调用 21 Login(Passwd)函数调用UserBlack()函数,先判断UsersName是否在黑名单中; 22 Login(Passwd)函数根据用户输入的判断情况,调用Welcome(LoginFlag)函数返回不同的提示信息; 23 Login(Passwd)函数在执行满三次正常结束之后调用UserBlackAdd(Users)函数,将用户所输入Users添加到黑名单列表; 24 3.主函数入口: 25 if __name__ == '__main__': 26 代码地址: 27 28 https://github.com/swht/projects/tree/master/day01/work-1 29 30 博客地址: 31 32 http://www.cnblogs.com/songqingbo/p/5091808.html 33 34 测试账号: 35 36 users:qingbo 37 passwd:test
流程图:
程序代码:
login.py
#!/usr/local/env python3 ''' Author:@swht Blog:http://www.cnblogs.com/songqingbo/ E-mail:qingbo.song@gmail.com ''' import os,sys,time UserName = "qingbo" UserPasswd = "test" UserBlackPath = "./user_black.txt" def Welcome(LoginFlag): '''欢迎信息页面''' if LoginFlag == "True": print ("Welcome login the System!") if LoginFlag == "Error": print ("Sorry,your passwd is Error!") if LoginFlag == "False": print ("Sorry,your userName is not have!") if LoginFlag == "Space": print("Sorry,your input is null!") def UserBlack(): '''黑名单判断''' if os.path.exists(UserBlackPath): #判断黑名单文件是否存在 FileUsers = open(UserBlackPath) #打开黑名单文件 UserBlack = FileUsers.read() #读取黑名单文件内容 FileUsers.close() #关闭黑名单文件句柄 if UserName == UserBlack: #判断黑名单列表中用户名称是否与指定userName相同 print ("Sorry,your name is in the blacklist,Please to connet the admin!") sys.exit(1) #若相同提醒用户‘该用户在黑名单列表中’并且退出程序 def UserBlackAdd(Users): '''黑名单列表增加''' print ("Your name is now to add the blacklist!") FileUsers = open(UserBlackPath,"w") FileUsers.write(Users) FileUsers.close() sys.exit(0) def Login(Passwd): '''用户登录接口函数''' global Users UserBlack(); #黑名单不存在或者用户名没在列表中执行while循环 while True: Users = input("users:").strip() #获取用户输入且去除首尾空格符 if Users == '': Welcome("Space") break else: if Users == UserName: #判定用户名是否正确 Passwd = input("passwd:").strip() if Passwd == '': Welcome("Space") break else: if Passwd == UserPasswd: #判断用户密码是否正确 Welcome("True"); #用户名和密码都正确,调用登录成功接口 time.sleep(1) sys.exit(0) else: Welcome("Error"); #密码错误调用密码错误提示接口 break else: Welcome("False"); #用户名和密码错误调用相应提示接口 break #main if __name__ == '__main__': for i in range(3): #允许用户输错3次 Login("Passwd"); if Users == '': print("Sorry,users is null,the system is quit a later!") time.sleep(1) sys.exit(1) else: UserBlackAdd(Users);
github更新地址:
https://github.com/swht/projects/tree/master/day01/work-1
附录:优化后代码
github更新地址:https://github.com/swht/projects/tree/master/day01/work-1.1
mian.py
1 #!/usr/local/env python3 2 ''' 3 Author:@南非波波 4 Blog:http://www.cnblogs.com/songqingbo/ 5 E-mail:qingbo.song@gmail.com 6 ''' 7 8 import checkinput,login,addusers 9 import time,sys 10 11 def main(): 12 Choose = input(''' 13 ============================================== 14 欢迎光临南非波波小屋! 15 ============================================== 16 [1]注册 [2]登录 [3]退出 17 请选择相应指令:''').strip() 18 if Choose == '': 19 print("指令不能为空,请输入正确指令!") 20 else: 21 if Choose.isdigit(): 22 Choose = int(Choose) 23 if Choose >= 1 and Choose <= 3: 24 if Choose == 1: 25 addusers.AddUsers() 26 if Choose == 2: 27 login.Login() 28 if Choose == 3: 29 print("欢迎下次光临南非波波小屋!") 30 time.sleep(1) 31 sys.exit(0) 32 else: 33 print("你输入的指令已超出范围,请按照系统指令进行输入!") 34 else: 35 print("请输入正确的指令,指令为整数型数字!") 36 37 #main 38 if __name__ =="__main__": 39 main()
addusers.py
1 #!/usr/local/env python3 2 ''' 3 Author:@南非波波 4 Blog:http://www.cnblogs.com/songqingbo/ 5 E-mail:qingbo.song@gmail.com 6 ''' 7 import getpass,sys,time 8 import checkinput,main 9 10 UsersListPath = "./userslist.txt" 11 12 #判断用户输入的是否符合要求 13 def AddUsers(): 14 print(''' 15 ============================================== 16 欢迎加入南非波波小屋 17 ==============================================''') 18 CountFlag1 = 0 19 CountFlag2 = 0 20 while True: 21 if CountFlag1 < 3: 22 User = input("请输入你的用户名:").strip() 23 if User == '': 24 print("你的输入为空,请重新输入!") 25 CountFlag1 += 1 26 CountFlag2 += 1 27 else: 28 if len(User) >= 4 and len(User) <= 10: 29 if checkinput.AddUsersList(User) == True: 30 print("该用户已被注册!") 31 else: 32 while True: 33 if CountFlag2 < 3: 34 Passwd1 = getpass.getpass("请输入你的密码:").strip() #getpass.getpass()可以将用户输入的密码以暗文形式实现 35 if Passwd1 == '': 36 print("你的输入为空,请重新输入!") 37 CountFlag2 += 1 38 elif len(Passwd1) < 6: 39 print("你的密码太简单,请重新输入!") 40 CountFlag2 += 1 41 else: 42 Passwd2 = getpass.getpass("请再次输入你的密码:").strip() 43 if Passwd1 == Passwd2: 44 db = {"user":User,"passwd":Passwd1} 45 UsersListFile = open(UsersListPath,"a") 46 UsersListFile.write(str(db)) 47 UsersListFile.write(' ') 48 UsersListFile.close() #直接调用增加用户接口 49 main.main() 50 else: 51 print("你两次输入的密码不一致,请重新输入!") 52 CountFlag1 += 1 53 else: 54 print("你输入的错误次数已达3次!系统将返回主页!") 55 main.main() 56 else: 57 print("请输入4-10位字符或数字组合作为用户名!") 58 CountFlag1 += 1 59 else: 60 print("你输入的错误次数已达3次!系统将退出!感谢你对南非波波小屋的支持!") 61 time.sleep(1) 62 sys.exit(1) 63 64 # AddUsers()
login.py
1 #!/usr/local/env python3 2 ''' 3 Author:@南非波波 4 Blog:http://www.cnblogs.com/songqingbo/ 5 E-mail:qingbo.song@gmail.com 6 ''' 7 import sys,time,getpass 8 import checkinput,main 9 10 def Login(): 11 '''用户登录接口函数''' 12 CountFlag1 = 0 #用户输入错误次数的统计 13 CountFlag2 = 0 #用户输入为空的次数统计 14 print(''' 15 ============================================== 16 欢迎光临南非波波小屋 17 ==============================================''') 18 while True: 19 if CountFlag1 < 3: 20 if CountFlag2 < 3: 21 Users = input("请输入登录用户名:").strip() #获取用户输入且去除首尾空格符 22 if Users == '': 23 print("你的输入为空,请重新输入!") 24 CountFlag1 += 1 25 CountFlag2 += 1 26 else: 27 checkinput.UserBlack(Users) #黑名单不存在 28 Passwd = getpass.getpass("请输入你的密码:").strip() 29 if Passwd == '': 30 print("密码不能为空,请重新入") 31 CountFlag1 += 1 32 CountFlag2 += 1 33 else: 34 if checkinput.LoginUsersList(Users,Passwd) == True: 35 print("%s你好,欢迎光临南非波波小屋,今天是%s" % (Users,(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))))) 36 time.sleep(1) 37 sys.exit(0) 38 elif checkinput.LoginUsersList(Users,Passwd) == False: 39 print("你输入的用户名不存在!请先注册后再登录!") 40 main.main() 41 else: #其他情况就报用户名或密码错误 42 print("你输入的用户名或密码错误!") 43 CountFlag1 += 1 44 else: 45 print("你输入的错误次数已达3次,系统将返回主页!") 46 main.main() 47 else: 48 print("你输入的错误次数已达3次,系统将退出") 49 if Users == '': #如果用户输入为空将直接退出 50 sys.exit(1) 51 else: #如果用户输入不为空将用户最后输入错误的users加到黑名单列表 52 checkinput.UserBlackAdd(Users) 53 54 # Login()
checkinput.py
1 #!/usr/local/env python3 2 ''' 3 Author:@南非波波 4 Blog:http://www.cnblogs.com/songqingbo/ 5 E-mail:qingbo.song@gmail.com 6 ''' 7 import os,sys,time 8 9 UsersListPath = "./userslist.txt" 10 UserBlackPath = "./userblacklist.txt" 11 #获取文件内容的行数 12 def Countnum(filename): 13 files = open(filename) 14 data = files.read() 15 files.flush() 16 files.close() 17 return data.count(' ') 18 19 #判断用户是否在黑名单中 20 def UserBlack(UserName): 21 '''黑名单判断''' 22 if os.path.exists(UserBlackPath): #判断黑名单文件是否存在 23 FileUsers = open(UserBlackPath) #打开黑名单文件 24 for UserBlack in FileUsers.readlines(): #读取黑名单文件内容 25 if UserName == UserBlack: #判断黑名单列表中用户名称是否与指定userName相同 26 print("对不起,该用户已在系统黑名单列表中,请联系管理员!") 27 time.sleep(1) 28 sys.exit(1) #若相同提醒用户‘该用户在黑名单列表中’并且退出程序 29 FileUsers.close() #关闭黑名单文件句柄 30 31 32 #将用户添加到黑名单中 33 def UserBlackAdd(Users): 34 '''黑名单列表增加''' 35 print("该用户将被家到系统黑名单中...") 36 FileUsers = open(UserBlackPath,"a") 37 FileUsers.write(Users) 38 FileUsers.close() 39 sys.exit(0) 40 41 #判断用户是否存在userlist列表中 42 def AddUsersList(Users): 43 if os.path.exists(UsersListPath): #判断文件存在 44 if Countnum(UsersListPath) == 0: #判断文件内容为空 45 return False 46 else: 47 UsersListFile = open(UsersListPath,'r') 48 for lines in UsersListFile.readlines(): 49 db = lines.strip(" ").strip() #去除换行符 50 db = eval(db) #将字符串类型转换成字典类型 51 if Users == db['user']: 52 return True #返回True值说明用户名匹配成功 53 UsersListFile.close() 54 else: #文件不存在 55 return False #返回False值说明黑名单文件不存在或为空 56 57 #判断用户是否存在userlist列表中 58 def LoginUsersList(Users,Passwd): 59 if os.path.exists(UsersListPath): #判断文件存在 60 if Countnum(UsersListPath) == 0: #判断文件内容为空 61 return False 62 else: 63 UsersListFile = open(UsersListPath,'r') 64 for lines in UsersListFile.readlines(): 65 db = lines.strip(" ").strip() #去除换行符 66 db = eval(db) #将字符串类型转换成字典类型 67 if Users == db['user']: 68 if Passwd == db['passwd']: 69 return True #返回True值说明用户名和密码匹配成功 70 UsersListFile.close() 71 else: #文件不存在 72 return False #返回False值说明黑名单文件不存在