zoukankan      html  css  js  c++  java
  • PYTHON核心编程第7章 7.5题

    !/usr/bin/env python

    coding=utf-8

    import time #用于计算时间
    import base64 #用于简单的字符加密
    import getpass #用于获取控制台输入的模块
    import os

    db = {}

    def deluser():
    """
    这是一个删除用户方法,判断字典中是否存在这个用户后进行删除操作
    """

    prompt = raw_input('input username: ').strip().lower()
    
    if prompt in db.keys():
        del db[prompt]
        print '%s is deleted' % (prompt)
    else:
        print "user %s is not exsts" % ( prompt )
    

    def showuser():
    """
    简单的遍历一下字典的key
    """
    print "There have %s users in system" % (len(db.keys()))
    for key in db.keys():
    print key

    def newuser():

    """

    添加用户的方法,中间使用了base64进行简单的字符串加密

    将生成的用户密码和当前的时间放入到列表中

    """

    prompt = 'login desired: '

    while True:

    name = raw_input(prompt).strip().lower()

    if db.has_key(name):

    prompt = 'name taken, try another: '

    else:

    break

    #pwd = raw_input('passwd: ')

    pwd = getpass.getpass('passwd: ')

    # 生成{name:[passwd,time]}这种格式

    db[name] = [base64.b64encode(pwd),time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())]

    print 'your base64 passwd is %s ' % (db[name])

    print '*' * 30

    print db

    def login():
    """
    判断老用户的方法,其中最主要的是做了两个事情,1是 时间戳转换
    2是字用户输入的字符串进行解密对比

    对原方法进行了更改,当前的主要功能如下:
    1. 当用户输入一个不存在的用户时,提示是否创建
    2. 当用户选择创建成功后,回到主界面
    3. 如果输入的是存在的用户,则开始登录
    """
    name = raw_input('login: ').strip().lower()
    
    
    while True:    
        if name not in db:
            Nuser = raw_input("Creat New User? (Y/N) :")
            if Nuser.lower() == 'y':
                pwd = getpass.getpass('passwd: ')
                db[name] = [base64.b64encode(pwd),time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())]
                print 'your base64 passwd is %s ' % (db[name])
                print '*' * 30
                print db
                break   
            else:
                break                       
                    
        #pwd = raw_input('passwd: ')
        pwd = getpass.getpass('passwd: ')
        passwd = base64.b64decode(db.get(name)[0])
        last_login = db[name][1]
        last_login_tap = time.mktime(time.strptime(last_login,'%Y-%m-%d %H:%M:%S'))
        
        #如果本次登录的时间与上次登录时间间隔4小时将会更新上次登录时间
        if passwd == pwd:
            now_time_tap = time.time() 
            if (now_time_tap - last_login_tap)/3600 < 4:
                print "You already logged in at: %s"  % (last_login)
            else:
                print 'welcome back %s, you last login time %s'  % ( name ,last_login )
                last_login = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
            break
        else:
            print 'login incorrect'
            break
    

    def showmenu():
    os.system('cls')
    prompt = """
    (U)ser Login
    (D)el user
    (S)how users
    (Q)uit
    Enter 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 '
    You picked: [%s]'  % choice
            
            if choice not in 'udsq':
                print 'invalid option,try again'
            else:
                chosen = True
            
        if choice == 'q' : done = True
        if choice == 'u' : login()
        if choice == 'd' : deluser()
        if choice == 's' : showuser()
    

    if name == 'main':
    showmenu()

  • 相关阅读:
    Passing Reference by value
    WPF中override ResourceDictionary中的设置的方法
    WPF中TextBox的PreviewMouseLeftButtonUp事件
    Attribute的理解和认识
    IIS添加服务
    Unix时间戳转换成C#中的DateTime
    KMP算法的实现
    IDA 宏定义
    实验吧-catalyst-system
    python整数转ASCII码
  • 原文地址:https://www.cnblogs.com/start0cheng/p/3665217.html
Copyright © 2011-2022 走看看