函数练习题
1.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作
import os def modify(filename, old, new): old_file = filename new_file = filename * 2 f = open(old_file, ‘r‘, encoding=‘utf-8‘) fnew = open(new_file, ‘w‘, encoding=‘utf-8‘) for line in f: newline = line.replace(old, new) fnew.write(newline) f.close() fnew.close() os.replace(new_file, old_file) modify(‘data.txt‘, ‘170‘, ‘175‘)
2.写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组
例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃A’)]
def cards(): num = [i for i in range(2,11)] num.extend([‘J‘,‘Q‘,‘K‘,‘A‘]) type = [‘红心‘,‘草花‘,‘方块‘,‘黑桃‘] result = [] for i in num: for j in type: result.append((j,i)) return result print(cards())
3.写函数,专门计算图形的面积
- 其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积
- 调用函数area(‘圆形’,圆半径) 返回圆的面积
- 调用函数area(‘正方形’,边长) 返回正方形的面积
- 调用函数area(‘长方形’,长,宽) 返回长方形的面积
def area(): def 计算长方形面积(): pass def 计算正方形面积(): pass def 计算圆形面积(): pass
import math print(‘‘‘ 请按照如下格式输出: 调用函数area(‘圆形’,圆半径) 返回圆的面积 调用函数area(‘正方形’,边长) 返回正方形的面积 调用函数area(‘长方形’,长,宽) 返回长方形的面积‘‘‘) def area(name,*args): def areas_rectangle(x,y): return ("长方形的面积为:",x*y) def area_square(x): return ("正方形的面积为:",x**2) def area_round(r): return ("圆形的面积为:",math.pi*r*r) if name ==‘圆形‘: return area_round(*args) elif name ==‘正方形‘: return area_square(*args) elif name ==‘长方形‘: return areas_rectangle(*args) print(area(‘长方形‘, 3, 4)) print(area(‘圆形‘, 3)) print(area(‘正方形‘, 3)) # 请按照如下格式输出: # 调用函数area(‘圆形’,圆半径) 返回圆的面积 # 调用函数area(‘正方形’,边长) 返回正方形的面积 # 调用函数area(‘长方形’,长,宽) 返回长方形的面积 # (‘长方形的面积为:‘, 12) # (‘圆形的面积为:‘, 28.274333882308138) # (‘正方形的面积为:‘, 9)
4.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
FLAG = False #加一个变量防止多次登录验证 def wrapper(fun): def inner(*args,**kwargs): ‘‘‘登录程序‘‘‘ global FLAG #将FLAG变量设置成全局变量 if FLAG: ret = fun(*args, **kwargs) return ret else: username = input(‘username:‘) password = input(‘password:‘) if username == ‘123‘ and password == ‘345‘: FLAG = True ret = fun(*args,**kwargs) return ret else: print(‘登录失败‘) return inner @wrapper def func_1(): print(‘func1 is running!‘) @wrapper def func_2(): print(‘func2 is running!‘) func_1() func_2()
5.通过生成器写一个日志调用方法, 支持以下功能
根据指令向屏幕输出日志
根据指令向文件输出日志
根据指令同时向文件&屏幕输出日志
以上日志格式如下
2017-10-19 22:07:38 [1] test log db backup 3
2017-10-19 22:07:40 [2] user alex login success
import time def logger(filename,channel=‘file‘): count = 0 def print_file(): with open(filename,"a",encoding="utf-8") as f: f.write(s) def print_terminal(): print(s,end="") def print_both(): with open(filename,"a",encoding="utf-8") as f: f.write(s) print(s,end="") func_dic = { ‘file‘:print_file, ‘terminal‘:print_terminal, ‘both‘:print_both, } print_func = func_dic[channel] while True: msg = yield s = "%s [%d] %s\n"%(time.strftime("%Y-%m-%d %H:%M:%S"),count,msg) print_func() count += 1 log_obj = logger(filename="web.log",channel=‘both‘) log_obj.__next__() log_obj.send(‘user xiao login success‘) log_obj.send(‘user qing login success‘)
文章来自:https://www.cnblogs.com/benzhangwen/p/11770966.html