day12-デコレーター、イテレーター、ジェネレーター、モジュールジョブ(ファイトランドロードディーラー)

  1. デコレータ@tagを作成するには、次の関数が必要です。

    def tag(name):
        def _(func):
            def new_func(*args, **kwargs):
                result = func(*args, **kwargs)
                return f'<{name}>{result}</{name}>'
            return new_func
        return _
    
    
    @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. 関数のデコレータを作成し、パラメータに応じてさまざまな操作を実行します。

    flag为 True,则 让原函数执行后返回值加 100,并返回。
    flag为 False,则 让原函数执行后返回值减 100,并返回。
    
    def num_operate(flag: bool):
        def _(func):
            def new_func(*args, **kwargs):
                result = func(*args, **kwargs)
                if type(result) in (int, float, complex):
                    if flag:
                        return result+100
                    else:
                        return result-100
                else:
                    return result
            return new_func
        return _
    
  3. 関数のデコレータを記述し、さまざまな演算子とデータに従って、元の関数の戻り値に対して対応する数値演算を実行します。

    例如:
    运算符是+,数据是 100, 就对原函数的返回值进行加100的处理
    运算符是-, 数据是 20,就对原函数的返回值进行减20的处理
    运算符是*, 数据是 3, 就对原函数的返回值进行乘3的处理
    运算符是/, 数据是 2, 就对原函数的返回值进行除2的处理
    其他情况的符号不做处理
    
    def num_operate(symbol, num):
        def _(func):
            def new_func(*args, **kwargs):
                result = func
                if type(result) in (int, float, complex):
                    if eval(symbol) == '+':
                        return result+num
                    elif eval(symbol) == '-':
                        return result - num
                    elif eval(symbol) == '*':
                        return result * num
                    elif eval(symbol) == '/':
                        return result / num
                    else:
                        return result
                return new_func
            return _
    
  4. Doudizhuディーラーを書く

    from random import shuffle
    
    
    # 准备一副牌,4花色,A23...9 10 J Q K,joker,JOKER
    def prepare_cards():
        suit_list = ['♠', '♥', '♣', '♦']
        poker1 = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
        poker_list = ['joker', 'JOKER']
        for suit in suit_list:
            for poker in poker1:
                poker_list.append(suit + poker)
                # 打乱牌顺序
                shuffle(poker_list)
        return poker_list
    
    
    # 三个玩家,一人17张,3张底牌
    def deal_cards():
        play1 = []
        play2 = []
        play3 = []
        gen = (poker for poker in prepare_cards())
        for time in range(17):
            play1.append(next(gen))
            play2.append(next(gen))
            play3.append(next(gen))
        cards = list(gen)
        # 调用函数对手牌和底牌进行排序
        play1.sort(key=sort_cards, reverse=True)
        play2.sort(key=sort_cards, reverse=True)
        play3.sort(key=sort_cards, reverse=True)
        cards.sort(key=sort_cards, reverse=True)
        return play1, play2, play3, cards
    
    
    # 对牌进行排序,方便观看每人手牌
    def sort_cards(item):
        char = item[1:]
        table = {
          
          '10': 10, 'J': 11, 'Q': 12, 'K': 13, 'A': 14, '2': 15, 'oker': 16, 'OKER': 17}
        if '3' <= char <= '9':
            return int(char)
        return table[char]
    
    
    if __name__ == '__main__':
        prepare_cards()
        for cards in deal_cards():
            print(cards)
    

おすすめ

転載: blog.csdn.net/xdhmanan/article/details/109151673