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
原创粉丝点击