函数练习题

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
© 2021 jiaocheng.bubufx.com  联系我们
ICP备案:鲁ICP备09046678号-3