Python作业--3(习题篇)

*****装饰器练习******
1. 创建add_log装饰器, 被装饰的函数打印日志信息;
2. 日志格式为: [字符串时间] 函数名: xxx, 运行时间:xxx, 运行返回值结果:xxx
“”“

import time


def add_info(fun):
    def wrapper(*args, **kwargs):
        a = fun(*args, **kwargs)
        print('函数名 : %s , 运行时间:%s , 函数返回值结果:%d' % (fun.__name__, time.ctime(), a))
    return wrapper
@add_info
def python(x, y):
    return x * y / 2
python(4,5)

这里写图片描述
**********Test5 第一题*********
数据表记录包含表索引和数值,请对表索引相同的记录进行合并,
即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
- 输入描述:先输入键值对的个数,然后输入成对的index和value值,以空格隔开
- 输出描述:输出合并后的键值对(多行)
- 示例1
输入
4
0 1
0 2
1 2
3 4
输出
0 3
1 2
3 4

count = int(input('输入:\n'))
dic = {}
for i in range(count):
    user_in = input()
    a = user_in.split()
    if int(a[0]) not in dic:
        dic[int(a[0])] = int(a[1])
    else:
        dic[int(a[0])] += int(a[1])
print('输出:%s %s'%(k,v)for k , v in dic.items())

这里写图片描述

*********Test5 第二题*********

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,
逆序排放后为“boy a am I”所有单词之间用一个空格隔开,
语句中除了英文字母外,不再包含其他字符
- 输入描述:将一个英文语句以单词为单位逆序排放。
- 输出描述:得到逆序的句子
示例1
- 输入
I am a boy
- 输出
boy a am I

user_in=input('输入:\n').strip()
print("输出:\n%s" % ' '.join(user_in.split()[::-1]))

这里写图片描述

********Test6 第一题********
用 filter()进行函数式编程,写一段代码来给出一个年
份的列表并返回一个只有闰年的列表。列表解析式实现方式呢?

#filter
print(list(filter(lambda i:(i%4==0 and i%100!=0) or i%400==0,range(2000,2101))))

这里写图片描述

#列表生成式
print(list(i for i in range(2000,2101) if (i%4==0 and i%100!=0) or i%400==0))

这里写图片描述

********Test6 第二题********

列表和字典复习.给出一个整数值,返回代表该值的英文,
比如输入 89 返回”eight-nine”。
附加题:
能够返回符合英文语法规则的形式,比如输入“89”返回
“eighty-nine”。本练习中的值限定在 0到 1,000.

# 练习
dic={'0':'zero','1':'one','2':'two','3':'three','4':'four','5':'five'
     ,'6':'six','7':'seven','8':'eight','9':'nine'}
user_in=input('输入:')
print('-'.join([dic[i] for i in user_in]))

这里写图片描述

dic = {'0': 'zero', '1': 'one', '2': 'two', '3': 'three', '4': 'four', '5': 'five'
    , '6': 'six', '7': 'seven', '8': 'eight', '9': 'nine', '10': 'ten', '11': 'eleven',
       '12': 'twelve', '13': 'thirteen', '14': 'fourteen', '15': 'fifteen',
       '16': 'sixteen', '17': 'seventeen', '18': 'eighteen', '19': 'nineteen'}
dic2 = {'2': 'twenty', '3': 'thirty', '4': 'forty', '5': 'fifty', '6': 'sixty', '7': 'seventy'
    , '8': 'eighty', '9': 'ninety'}

user_in = input('输入:')
if 0<=int(user_in)<=1000:
    if len(user_in) == 1:
        print(dic[user_in])
    elif len(user_in) == 2:
        if user_in[0] == '1':
            print(dic[user_in])
        else:
            print('%s-%s' % (dic2[user_in[0]], dic[user_in[-1]]))
    elif len(user_in) == 3:
        if user_in[1] == user_in[-1] == '0':
            print('%s hundred' % dic[user_in[0]])
        else:
            print('%s hundred and %s-%s'%(dic[user_in[0]], dic2[user_in[1]], dic[user_in[-1]]))
    else:
        print('One thousand')
else:
    print('输入错误!')

这里写图片描述
这里写图片描述

********Test6 第三题********

给出两个可识别格式的日期,比如 MM/DD/YY 或者
DD/MM/YY 格式,计算出两个日期间的天数.

def day_num(data):
    day = 0
    for i in range(1, int(data[-1]) + 1):
        if (i % 4 == 0 and i % 100 != 0) or i % 400 == 0:
            day += 366
        else:
            day += 365
    for j in range(1, int(data[1])):
        for k in dic:
            if str(j) in dic[k]:
                day += int(k)
                break
            else:
                pass
    day += int(data[0])
    return day


dic = {'31': ['1', '3', '5', '7', '8', '10', '12'], '30': ['4', '6', '9', '11'], '28': '2'}
print('请按DAY/MONTH/YERA(07/05/2018)格式输入日期:')
data1 = input('>>').split('/')
data2 = input('>>').split('/')
print('两天相差:%d天' % abs(day_num(data2) - day_num(data1)))

这里写图片描述

********Test6 第四题********

a)修改之前的用户管理脚本,使它能记录用户上次的登录日期和时间(用 time 模块)
,并与用户密码一起保存起来。程序的界面有要求用户输入用户名和密码的提示。无论
户名是否成功登录,都应有提示,在户名成功登录后,应更新相应用户的上次登录时间戳
。如果本次登录与上次登录在时间上相差不超过 4 个小时,则通知该用户:
 “You already logged in at: <last_ login_timestamp>.”
b) 添加一个“管理”菜单,其中有以下两项:
    1)删除一个用户
    2)显示系统中所有用户的名字和他们的密码的清单。
c) 要求用户名不区分大小写。
d) 加强对用户名的限制,不允许符号和空白符









info = {
    'root': {
        "name": "root",
        "passwd": "redhat",
        "gender": 1,  # 1:男,2:女;
        "email": "[email protected]",
        "age": 18,
        'time': '2018-05-07 15:27:06'
    },
}

menu = """"

    1). 注册新用户
    2). 删除用户
    3). 显示用户信息
    4). 退出系统(exit(0))

"""


def addUser():
    print("01-用户注册界面".center(20, '*'))
    inname = input("*注册用户名:").strip().lower()
    # 判断用户是否已注册?
    if inname in info:
        print('Error:用户%s已注册!' % (inname))
    else:
        passwd = input("*密码:")
        gender = input("性别(1-男,2-女):")
        if not gender:
            gender = None
        else:
            gender = int(gender)
        email = input("邮箱地址:")
        if not email:
            email = None
        age = input("年龄:")
        if not age:
            age = None
        else:
            age = int(age)
        info[inname] = {
            "name": inname,
            "passwd": passwd,
            "gender": gender,  # 1:男,2:女;
            "email": email,
            "age": age
        }
        print("用户%s注册成功" % (inname))


def deleteUser():
    inuser = input("注销的用户名:").strip().lower()
    if inuser in info:
        del info[inuser]
        print("用户%s注销成功" % (inuser))
    else:
        print("用户名%s不存在" % (inuser))


def make():
    while True:
        print("用户管理系统".center(40, '*'), menu)
        choice = input("请输入你的选择:")
        if choice == '1':
            addUser()
        elif choice == '2':
            deleteUser()
        elif choice == '3':
            for i in info:
                print('%s %s' % (i, info[i]))
        elif choice == '4':
            exit(0)
        else:
            print("Error:错误输入!<请输入正确的选择.>")


def main():
    import time
    tryCount = 0
    while tryCount < 3:
        tryCount += 1
        inuser = input("用户名:").strip().lower()
        if inuser in info:
            inpasswd = input("密码:")
            passwd = info[inuser]['passwd']
            if inpasswd == passwd:
                print("%s登陆成功!" % (inuser))
                times = int(time.time())
                if times - time.mktime(time.strptime(info[inuser]['time'], '%Y-%m-%d %H:%M:%S')) < 4 * 60 * 60:
                    print('You already logged in at:%s ' % info[inuser]['time'])
                info[inuser]['time'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(times))
                make()
            else:
                print("用户%s的密码错误!" % (inuser))
        else:
            print("用户名%s不存在" % (inuser))
    else:
        print("尝试次数超过3次!")


main()

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/wl_python/article/details/80230149