1. 前言
最近一直在研究学习python,基于python写一个模拟用户登陆验证的程序,大牛勿喷,欢迎各位同仁指导,学习!该程序使用函数式编程方式,将各个功能模块用函数实现,具体函数说明如下:get_username()从键盘中获取用户的输入,check_user_lock()检查用户名是否被锁定,get_password()从键盘获取密码的输入,check_user_password()检查用户名和密码是否正确,lock_user()用户名和密码输错三次则锁定用户,main()执行函数功能调用和功能检测。
2. 程序内容
#!/usr/bin/python #coding:utf-8 import sys import getpass def get_username(): ''' 从键盘中获取用户的输入,并对输入做检测,允许Ctrl+C,Ctrl+D退出输入,输入不为空,则返回用户名 ''' try: while True: username = raw_input('\033[32mPlease input username:\033[0m') if username.strip() == '': continue else: break except Exception as e: print e sys.exit(1) except KeyboardInterrupt: print "" sys.exit(1) return username def get_password(): ''' 从键盘中获取密码的输入,并检测 ''' try: while True: password = getpass.getpass('\033[32mPlease input password:\033[0m') if password.strip() == '': continue else: break except Exception as e: print e sys.exit(1) except KeyboardInterrupt: print "" sys.exit(1) return password def check_user_lock(username): ''' 检查用户名是否被锁定,将锁定的用户名存放在userlock.txt文件内,锁定则返回True ''' lock_flag = False try: f = file('userlock.txt','r') if username in [ user.strip() for user in f.readlines() ]: lock_flag = True f.close() except Exception as e: print e sys.exit(1) return lock_flag def lock_user(username): ''' 执行用户锁定,写入锁定的文件内,输错密码的次数交由其他地方处理,此处只是执行用户锁定的操作 ''' try: f = file('userlock.txt','a+') if username not in [ user.strip() for user in f.readlines() ]: f.write(username) f.write("\n") f.close() except Exception as e: print e sys.exit(1) def check_user_password(username,password): ''' 检测用户名和密码是否正确,用户名和密码存放在userinfo.txt内,用户名和密码以:号分割,如果匹配正确,则返回True ''' allow_flag = False try: f = file('userinfo.txt','r') for line in f.readlines(): user,passwd = line.strip().split(":") if user == username and password == passwd: allow_flag = True f.close() except Exception as e: print e sys.exit(1) return allow_flag def main(): ''' 执行函数功能调用,依次调用get_username(),get_password函数,并调用check_user_password()函数检查用户名和密码是否输入正确,不正确,则有三次输入用户名or密码的机会 ''' retry_time = 0 retry_max_time = 3 while True: username = get_username() if check_user_lock(username) is True: sys.exit('\033[31muser %s has been locked now\033[0m') % (username) password = get_password() if check_user_password(username,password) is not True: retry_time = retry_time + 1 if retry_time < retry_max_time: print "用户密码输入错误,请重新输入(还剩%d次):" % (retry_max_time - retry_time) else: print "超过三次,用户已经被锁定!" lock_user(username) sys.exit(-1) else: print "\033[33mCongratulation,you have login User System!\033[1m" break if __name__ == "__main__": main()
说明:userinfo.txt文件内,用户密码以:user:password的方式书写,每行一个代表一个用户,userlock.txt则一个用户一行。
转载于:https://blog.51cto.com/happylab/1720815