python核心编程学习笔记-2016-07-30-01-习题7-5
来源:互联网 发布:云墙vpn mac 编辑:程序博客网 时间:2024/05/13 18:18
习题7-5,登陆系统。
代码:
#-*-coding: utf-8-*-# 图形界面等到学完Tkinter之后再完善import time, msvcrt, sysdb = {}user = {} # 建立存储单个用户的账号、密码和登录时间的字典# 这个是在网上找到的python密码回显的函数,经测试可行def pwd_input(): chars = [] while True: newChar = msvcrt.getch() if newChar in '\r\n': # 如果是换行,则输入结束 print '' break elif newChar == '\b': # 如果是退格,则删除末尾一位 if chars: del chars[-1] sys.stdout.write('\b \b') # 删除一个星号 else: chars.append(newChar) sys.stdout.write('*') # 显示为星号def newuser(): prompt = "login desired and case-insensitive: " while True: name = raw_input(prompt) if name.isalnum(): if db.has_key(name.lower()): # 用户名全部以小写形式存入字典中 prompt = "name taken, try another: " else: break else: print "Your name has invalid char." print "Enter your password:" pwd = pwd_input() db[name.lower()] = pwd user['ID'] = name # 记录用户登陆的账号 user['password'] = pwd # 记录用户登陆的密码 user['login_time'] = time.time() # 记录用户第一次登陆的时间def olduser(): name = raw_input("login ignoring case: ") print "Enter your password:" pwd = pwd_input() passwd = db.get(name.lower()) if passwd == pwd: print "welcome back", name last_login_time = user['login_time'] # 记录用户上次登陆时间 user['login_time'] = time.time() # 记录用户本次登录时间 time_delta = user['login_time'] - last_login_time # 求两次登陆时间差,以时间戳表示 if time_delta <= 4 * 60 * 60: # 本次登录时间与上次登录时间少于4小时,显示上次登录时间。 print "You already logged in at: {0}".format(time.ctime(last_login_time)) else: print "login incorrect."def manage(): while True: try: option = int(raw_input("Enter 1 or 2: ")) except ValueError,e: print "*** Input error:", e else: if option in range(1, 3): break else: print "Enter the right number." if option == 1: name = raw_input("Enter a name you want to delete: ") # 输入要删除用户的名字 db.pop(name, "This name does not exit!") else: for k, v in iteritems(db): print k, v def showmenu(): prompt = """(U)ser Login(M)anage(Q)uitEnter choice: """ done = False while not done: chosen = False while not chosen: try: choice = raw_input(prompt).strip()[0].lower() except (EOFError, KeyboardInterrupt): choice = 'q' print "\nYou picked: [%s]" % choice if choice not in 'umq': print "invalid option, try again." else: chosen = True if choice == 'u': while True: u = raw_input("Are you newuser or olduser? Enter n or o: ") if u == 'n': newuser() break elif u == 'o': olduser() break else: print "Enter the givern char." elif choice == 'm': manage() else: done = Trueif __name__ == "__main__": showmenu()注意python中密码回显的函数。
0 0
- python核心编程学习笔记-2016-07-30-01-习题7-5
- python核心编程学习笔记-2016-07-23-01-习题5-6
- python核心编程学习笔记-2016-07-20-01-习题3-13
- python核心编程学习笔记-2016-07-26-01-习题6-13
- python核心编程学习笔记-2016-07-28-01-习题6-16
- python核心编程学习笔记-2016-08-28-01-习题18-4和习题18-9
- python核心编程学习笔记-2016-08-03-01-习题9-9
- python核心编程学习笔记-2016-08-05-01-习题9-19
- python核心编程学习笔记-2016-08-23-01-习题16-13
- python核心编程学习笔记-2016-07-18-01-print
- python核心编程学习笔记-2016-08-28-02-习题18-6
- python学习--核心编程5习题以及知识点记录
- 《Python核心编程》习题7-5与13-4
- 《Python核心编程》第7章 习题
- python核心编程 习题7-10
- 《Python核心编程》第7章 习题
- 《Python核心编程》第7章 习题
- python核心编程习题5-9章
- PyGobject(四十六)布局容器之Fixed
- java学习之在tcp网络上传递对象
- java挑战高并发(7):java 线程中yield的用法
- 为自己的button添加一个监听器
- Linux kernel configuration
- python核心编程学习笔记-2016-07-30-01-习题7-5
- 如何控制四轴飞行器四个方向飞行
- 零散知识点:关于后端语言谁能不能替换谁一说
- 手机发热原因
- MAC安装视频播放器MPV
- setImageResource与setBackgroundResource使用注意
- Python描述符(descriptor)解密 属性(property)、以及装饰器(decorator)
- 六个步骤,细说电商banner图设计之色彩的奥秘
- 内排序-交换类排序-快速排序