7.12 练习
#!/usr/bin/python # -*- coding: utf-8 -*- # 7–5. userpw2.py. 下面的问题和例题7.1 中管理名字-密码的键值对数据的程序有关。 # (a) 修改那个脚本,使它能记录用户上次的登录日期和时间(用time 模块), # 并与用户密码一起保存起来。程序的界面有要求用户输入用户名和密码的提示。 # 无论户名是否成功登录,都应有提示,在户名成功登录后,应更新相应用户的上次 # 登录时间戳。如果本次登录与上次登录在时间上相差不超过4 个小时,则通知该用户: # “You already logged in at: <last_ login_timestamp>.” # (b) 添加一个“管理”菜单,其中有以下两项:(1)删除一个用户 (2)显示系统中所有用户 # 的名字和他们的密码的清单。 # (c) 口令目前没有加密。请添加一段对口令加密的代码(请参考crypt, rotor, 或其它加密模块) # (d) 为程序添加图形界面,例如,用Tkinter 写。 # (e) 要求用户名不区分大小写。 # (f) 加强对用户名的限制,不允许符号和空白符。 # (g) 合并“新用户”和“老用户”两个选项。如果一个新用户试图用一个不存在的用户名登录, # 询问该用户是否是新用户,如果回答是肯定的,就创建该帐户。否则,按照老用户的方式登录。 # (a) import time import crypto dbuserinfo = {} def newuser(): prompt = 'login desired: ' while True: name = raw_input(prompt) if dbuserinfo.has_key(name): prompt = 'name taken, try another: ' continue else: break pwd = raw_input('passwd: ') crypt_pwd = crypto.crypt(pwd) dbuserinfo[name] = [] dbuserinfo[name].append(pwd) dbuserinfo[name].append(time.time()) dbuserinfo[name].append(time.ctime()) def olduser(): name = raw_input('login: ') pwd = raw_input('passwd: ') if dbuserinfo.has_key(name): passwd = dbuserinfo.get(name)[0] if passwd == pwd: print '*' * 10 print 'welcome back', name print '*' * 10 current_time = time.time() current_ctime = time.ctime() if (current_time - dbuserinfo[name][1]) < 60*60*4: print "You already logged in at: <%s>." % dbuserinfo[name][2] dbuserinfo[name][1] = current_time dbuserinfo[name][2] = current_ctime else: print '*' * 10 print 'login incorrect' print '*' * 10 else: print '*' * 10 print 'login incorrect' print '*' * 10 # (b) def deluser(): prompt = 'delete user name: ' delname = raw_input(prompt) if dbuserinfo.has_key(delname): del dbuserinfo[delname] print '*' * 10 print "Delete success" print '*' * 10 else: print '*' * 10 print "User %s not exit." % delname print '*' * 10 def showusers(): print '*' * 4, ' User list ', '*' * 4 for user in dbuserinfo.keys(): print user def showmenu(): prompt = """ Please choice: (N)ew User Login (E)xisting User Login (D)elete User (S)how All User (Q)uit Enter choice: """ done = False while not done: chosen = False while not chosen: try: choice = raw_input(prompt).strip()[0].lower() except (EOFError, IndexError) as e: choice = 'q' print '\nYou picked: [%s]' % choice if choice not in 'nedsq': print 'invalid option, try again' else: chosen = True if choice == 'q': done = True elif choice == 'n': newuser() elif choice == 'e': olduser() elif choice == 'd': deluser() elif choice == 's': showusers() showmenu()
python核心编程--第其章 7.12 练习
时间: 2024-10-18 01:38:05