Trabajos de decorador e iterador / generador paramétricos

  1. Escribir un @tag de decorador requiere las siguientes funciones:

    def tag(name):
        def tag_(func):
            def new_func(*args,**kwargs):
                result=func(*args,**kwargs)
                if type(result) != str:
                	return f'<{name}>{result}</{name}>'
                return result
            return new_func
        return tag_
    
    
    @tag(name='p')
    def render(text):
        # 执行其他操作
        return text
    
    
    @tag(name='div')
    def render2():
        return 'abc'
    
    
    print(render('Hello'))  # 打印出: <p>Hello</p>
    print(render2())  # 打印出: <div>abc</div>
    
  2. Escribe un decorador para la función y realiza diferentes operaciones según los parámetros.

    '''
    flag为 True,则 让原函数执行后返回值加 100,并返回。
    flag为 False,则 让原函数执行后返回值减 100,并返回。
    '''
    def change(flag):
        def change_(func):
            def new_func(*args,**kwargs):
                result = func(*args, **kwargs)
                if type(result) in (int,float)l:
                    if flag :
                        return result+100
                    else:
                        return result-100
                return result
            return new_func
        return change_
    
    @change(True)
    def _():
        return 10
    result_=_()
    print(result_)
    
  3. Escriba un decorador para la función y realice las operaciones numéricas correspondientes en el valor de retorno de la función original de acuerdo con diferentes operadores y datos.

    '''例如:
    运算符是+,数据是 100, 就对原函数的返回值进行加100的处理
    运算符是-, 数据是 20,就对原函数的返回值进行减20的处理
    运算符是*, 数据是 3, 就对原函数的返回值进行乘3的处理
    运算符是/, 数据是 2, 就对原函数的返回值进行除2的处理
    其他情况的符号不做处理'''
    def change(operator:str,num):
        def change_(func):
            def new_func(*args,**kwargs):
                result = func(*args, **kwargs)
                if type(reult) not in (int,float):
                	return result
                if operator =='+':
                    return result+num
                elif operator == '-':
                    return result - num
                elif operator =='/':
                    return result/num
                elif operator =='*':
                    return result*num
                else:
                	return result
            return new_func
        return change_
    
    @change('+',10)
    def _():
        return 10
    result_=_()
    print(result_)
    
    
  4. Escriba un distribuidor Doudizhu


num_board = {
    
    2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A'}
board_w = {
    
    '大王', '小王'}
flower_color = {
    
    '梅花', '黑桃', '方块', '红桃'}


def deal_cards():
    # 准备一副牌
    # 洗牌(打乱顺序)(集合是无序的,可以放在集合里,也可以导入模块,调用shuffle函数打乱)
    boards = {
    
    f"{j}{i}" for i in num_board for j in flower_color}
    boards =iter( board_w | boards)
    # 发牌
    player1=[]
    player2=[]
    player3=[]
    for _ in range(17):
        player1.append(next(boards))
        player2.append(next(boards))
        player3.append(next(boards))
        
    # 返回分配好的4组牌
    return f'player1:{player1}, player2:{player2}, player3:{player3},地主牌:{list(boards)}'

print(deal_cards())

Supongo que te gusta

Origin blog.csdn.net/weixin_44628421/article/details/109091198
Recomendado
Clasificación