- 写一个生成式能够产生的数据为: 1, 4, 27, 256, 3125,…, 9**9
nums = (n**n for n in [1, 2, 3, 4, 5, 6, 7, 8, 9])
- 写一个生成式能够产生1-10中所有半径是偶数的圆的面积
from math import pi
area = (math.pi*r**2 for r in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] if r % 2 ==0)
- 写一个生成式交换字典的键和值,产生一个新的字典
dict1 = {'a': 1, 'b': 2}
dict2 = {dict1[key]: key for key in dict1}
- 为函数写一个装饰器,在函数执行之后输出 after
def output(fn):
def func1(*args, **kwargs):
fn(*args, **kwargs)
print('after')
return func1
@output
def func2(n):
print(n)
print('----------')
- 为函数写一个装饰器,把函数的返回值 +100 然后再返回。
def output(fn):
def func1(*args, **kwargs):
y = fn(*args, **kwargs)
print(y + 100)
return func1
@output
def func2(n):
return n
- 写一个装饰器@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(name):
def get(n):
def word(*args, **kwargs):
if name == 'p':
y = '<p>'+n(*args, **kwargs)+'</p>'
return y
return '<dic>abc<dic>'
return word
return get
- 为函数写一个装饰器,根据参数不同做不同操作。
flag为True,则 让原函数执行后返回值加100,并返回。
flag为False,则 让原函数执行后返回值减100,并返回。
def switch(flag):
def get(arg):
def value(*args, **kwargs):
if flag:
return arg() + 100
return arg() - 100
return value
return get
- 写一个斗地主发牌器
import random
def poker():
pokers = []
nums = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
colors = ['♥', '♠', '♣', '♦']
for num in nums:
for color in colors:
pokers.append('%s%s' % (color, num))
pokers.extend(['小王', '大王'])
return (pokers)
def shuffle(pokers):
random.shuffle(pokers)
def deal(pokers):
poker_iter = iter(pokers)
p1 = []
p2 = []
p3 = []
num = 1
for _ in range(51):
if num == 1:
p1.append(next(poker_iter))
elif num == 2:
p2.append(next(poker_iter))
elif num == 3:
p3.append(next(poker_iter))
num = 0
num += 1
return p1, p2, p3, list(poker_iter)
pokers1 = poker()
shuffle(pokers1)
print(pokers1)
p1, p2, p3, hole = deal(pokers1)
print(p1)
print(p2)
print(p3)
print(hole)