12迭代生成器和模块作业

# -*- Coding = utf-8 -*-
# @time: 2020/12/23 17:24
# Author: YKL

# 1.写一个装饰器@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>
def tag(f):
    def new_f(*args, **kwargs):
        result = f(*args, **kwargs)
        if type(result) == str:
            return f'<p>{result}</p>'
        return result
    return new_f

# 2.为函数写一个装饰器,根据参数不同做不同操作。
# flag为 True,则 让原函数执行后返回值加 100,并返回。
# flag为 False,则 让原函数执行后返回值减 100,并返回。
def add(flag):
    def add_num(f):
        def new_f(*args, **kwargs):
            result = f(*args, **kwargs)
            if type(result) in (int, float, bool, complex):
                if flag == True:
                    return result + 100
                else:
                    return result - 100
            return result
        return new_f
    return add_num

@add(False)
def func1(a,b):
    return a+b

print(func1(10,20))

# 3.为函数写一个装饰器,根据不同的运算符和数据对原函数的返回值进行相应的数值操作
# 例如:
# 运算符是+,数据是 100, 就对原函数的返回值进行加100的处理
# 运算符是-, 数据是 20,就对原函数的返回值进行减20的处理
# 运算符是*, 数据是 3, 就对原函数的返回值进行乘3的处理
# 运算符是/, 数据是 2, 就对原函数的返回值进行除2的处理
# 其他情况的符号不做处理
def operation(char,num):
    def opera(f):
        def new_f(*args, **kwargs):
            re = f(*args, **kwargs)
            if char == '+':
                return re + num
            if char == '-':
                return re - num
            if char == '*':
                return re * num
            if char == '/':
                return re / num
            return re
        return new_f
    return opera

@operation('+',100)
def func2(a):
    return a

print(func2(10))

# 4.写一个斗地主发牌器
import random

def deal(list1:list):
    random.shuffle(list1)
    list2 = tuple(list1)
    i1 = iter(list2)
    for _ in range(17):
        yield next(i1)

cards = ['方片3', '梅花3', '红桃3', '黑桃3',
         '方片4', '梅花4', '红桃4', '黑桃4',
         '方片5', '梅花5', '红桃5', '黑桃5',
         '方片6', '梅花6', '红桃6', '黑桃6',
         '方片7', '梅花7', '红桃7', '黑桃7',
         '方片8', '梅花8', '红桃8', '黑桃8',
         '方片9', '梅花9', '红桃9', '黑桃9',
         '方片10', '梅花10', '红桃10', '黑桃10',
         '方片J', '梅花J', '红桃J', '黑桃J',
         '方片Q', '梅花Q', '红桃Q', '黑桃Q',
         '方片K', '梅花K', '红桃K', '黑桃K',
         '方片A', '梅花A', '红桃A', '黑桃A',
         '方片2', '梅花2', '红桃2', '黑桃2',
         'BlackJoker', 'RedJoker']
landlord_card = random.choice(cards)
player1 = [x for x in deal(cards)]
player2 = [x for x in deal(list((set(cards)-set(player1))))]
player3 = [x for x in deal(list((set(cards)-set(player1)-set(player2))))]
hole_cards = list(set(cards) - set(player1) - set(player2) - set(player3))
if landlord_card in player1:
    print('玩家一的牌:',player1,'玩家二的牌:',player2,'玩家三的牌:',player3,'地主是玩家一','底牌:',hole_cards,sep='\n')
elif landlord_card in player2:
    print('玩家一的牌:',player1,'玩家二的牌:',player2,'玩家三的牌:',player3,'地主是玩家二','底牌:',hole_cards,sep='\n')
else:
    print('玩家一的牌:', player1, '玩家二的牌:', player2, '玩家三的牌:', player3, '地主是玩家三', '底牌:', hole_cards, sep='\n')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值