*****装饰器练习******
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": "root@qq.com",
"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()