函数部分:
1.编写一个名为collatz()的函数,它有一个名为number的参数
如果参数是偶数,那么collatz()就打印出number//2
如果number是奇数,collatz()就打印3*number+1
def collatz(number):
# if number % 2 == 0:
# print number // 2
# else:
# print 3 * number + 1
print number // 2 if number % 2 == 0 else 3 * number + 1
collatz(7)
输入4时:
输入7时:
2.编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数
def cacluate(*num):
li = []
avg = sum(num)/len(num)
for i in num:
if i > avg:
li.append(i)列表生成式部分:
return avg,li
count = cacluate(12,13,14,15,16)
print count
输入12,13,14,15,16时:
3. 编写函数, 接收一个列表(包含10个整形数)和一个整形数k, 返回一个新列表.
函数需求:
- 将列表下标k之前对应(不包含k)的元素逆序;
- 将下标k及之后的元素逆序;
import random
def fun(alist, k):
if k < 0 or k > len(alist):
return 'error key'
newL1 = alist[:k]
newL2 = newL1[::-1]
newL3 = alist[k:]
newL4 = newL3[::-1]
return newL2 + newL4
list = []
for i in range(10):
num = random.randint(1, 50)
list.append(num)
print list
a = fun(list, 4)
print a
结果:
4.模拟轮盘抽奖游戏
轮盘分为三部分: 一等奖, 二等奖和三等奖;
轮盘转的时候是随机的,
如果范围在[0,0.08)之间,代表一等奖,
如果范围在[0.08,0.3)之间,代表2等奖,
如果范围在[0, 1.0)之间,代表3等奖,
模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.
import random
rewardDict = {
'一等奖': (0, 0.08),
'二等奖': (0.08, 0.3),
'三等奖': (0.3, 1)
}
def rewardFun():
"""用户得奖等级"""
# 生成一个0~1之间的随机数
num = random.random()
# 判断随机转盘转的数是几等奖
for k, v in rewardDict.items():
# 这里的v是元组
if v[0] <= num < v[1]:
return k
# print rewardFun()
resultDict = {}
for i in range(1000):
# res:本次转盘的等级(一/二/三等奖)
res = rewardFun()
if res not in resultDict:
resultDict[res] = 1
else:
resultDict[res] = resultDict[res] + 1
for k, v in resultDict.items():
print k, '---------->', v
5. 对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
f(13) = 1**2 + 3**2 = 10
f(207) = 2**2 + 0**2 + 7**2 = 53
下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b, 且k*f(n)=n
输入:第一行包含3个正整数k,a, b, k>=1, a,b<=10**18, a<=b;
输出:输出对应的答案;
范例:输入: 51 5000 10000
输出: 3
def f(n): # 13
# 1.先把数字转换为字符串
n = str(n)
# 2.计算字符串中每个数的平方
sum = 0
for i in n:
sum += int(i) ** 2
return sum
print f(13)
print f(207)
# 1.接收变量
s = raw_input('请输入(k,a,b):') # '51 5000 10000'
li = []
for item in s.split(): # ['51','5000','10000']
li.append(int(item))
k, a, b = li
# 2.进行判断是否满足条件
count = 0
for i in range(a, b + 1):
if k * f(i) == i:
count += 1
print count
列表生成式部分:
6.生成一个列表,列表元素分别为[1**2,2**2,3**2,4**2...n**2]
7.找出1~10之间的所有偶数,并且返回一个列表(包含以这个偶数为半径的圆的面积)
8.找出1~num之间的所有质数
字典生成式部分:
9.假设有20个学生,学分在60~100之间,筛选出成绩在90分以上的学生
或者:
10.将字典中的key值和value值调换
11.大小写合并,key值最终全部为小写
装饰器部分:
12.打印如图
13.制作显示 login , logout , savemoney , transferMoney,分别再上下加上中秋快乐和欢迎再来
14.获取每个函数的执行时间
1).函数执行前的时间
2).函数执行后的时间
import string
import time
import random
import functools
li = [random.choice(string.ascii_letters) for i in range(100)]
def timeit(fun):
@functools.wraps(fun)
def wrapper(*args, **kwargs):
start_time = time.time()
res = fun(*args, **kwargs)
stop_time = time.time()
print '运行时间为:%.6f' % (stop_time - start_time)
return res
return wrapper
@timeit
def con_add():
s = ''
for i in li:
s += (i + ',')
print s
@timeit
def join_add():
print ','.join(li)
@timeit
def fun_list(n):
"""这是fun_list函数"""
return [2 * i for i in range(n)]
@timeit
def fun_map(n):
return list(map(lambda x: x * 2, range(n)))
con_add()
join_add()
print fun_list(5000)
print fun_map(5000)
print fun_list.__name__
print fun_list.__doc__
15.用户登陆验证的装饰器 is_login
1).如果用户登陆成功,则执行被装饰的函数
2).如果用户登陆不成功,则执行登陆函数
import functools
login_users = ['admin', 'root']
def is_login(fun):
@functools.wraps(fun)
def wrapper(*args, **kwargs):
if kwargs.get('name') in login_users:
res = fun(*args, **kwargs)
return res
else:
res = login()
return res
return wrapper
def login():
return '请登陆'
@is_login
def write(name):
return '请写博客'
print write(name='admin')
16.创建装饰器,要求如下:
1).创建add_log装饰器,被装饰的函数打印日志信息;
2).日志格式为:【字符串时间】函数名:xxx,运行时间:xxx,运行返回值结果:xxx
import functools
import time
def add_log(fun):
@functools.wraps(fun)
def wrapper(*args, **kwargs):
start_time = time.time()
res = fun(*args, **kwargs)
end_time = time.time()
print '[%s] 函数名:%s,运行时间:%.6f,运行返回值:%d' % (time.ctime(), fun.__name__, end_time - start_time, res)
return res
return wrapper
@add_log
def add(x, y):
time.sleep(1)
return x + y
print add(1, 2)
17.编写装饰器required_ints,条件如下:
1).确保函数接收的每一个参数都是整数
2).如果参数不是整数,打印TypeError:参数必须为整形数
import functools
def required_ints(fun):
@functools.wraps(fun)
def wrapper(*agrs, **kwargs):
for i in agrs:
if not isinstance(i, int):
print 'TypeError:参数必须为整形数'
break
else:
res = fun(*agrs, **kwargs)
return res
return wrapper
@required_ints
def add(a,b):
return a + b
print add(1,2)
18.编写装饰器required_types,条件如下:
1,装饰器为@required_types(int,float)确保函数接收的每一个参数都是int或者float
2,装饰器为@required_types(list)确保函数接收到的每一个都是list类型
3,装饰器为@required_types(str,int)确保函数接收到的每一个都是str或int类型
4,如果参数不满足条件, TypeError:参数必须为XXX类型
import functools
def required_types(*kind):
def types(fun):
@functools.wraps(fun)
def wrapper(*args, **kwargs):
for i in args:
if not isinstance(i, kind):
print 'TypeError:参数必须为', str(kind)
break
else:
res = fun(*args, **kwargs)
return res
return wrapper
return types
@required_types(int)
def print_num(x):
return x
print print_num(2.5)
19.多个装饰器,先验证是否登陆成功再验证权限
import functools
import inspect
def is_root(fun):
@functools.wraps(fun)
def wrapper(*args, **kwargs):
# inspect.getcallargs返回值是字典,key值为:形参 value值为:形参对应的实参
inspect_res = inspect.getcallargs(fun, *args, **kwargs)
print 'inspect_res的返回值:%s' % inspect_res
if inspect_res.get('name') == 'root':
res = fun(*args, **kwargs)
return res
else:
print 'Error:no permission'
return wrapper
login_name = ['root', 'admin', 'redhat']
def is_login(fun):
@functools.wraps(fun)
def inner(*args, **kwargs):
# *args是可变参数,args是元组类型数据
# **kwargs是一个字典,可以传递任意多个key-value对
if args[0] in login_name:
res = fun(*args, **kwargs)
return res
else:
print 'Error:%s未登陆' % args[0]
return inner
@is_login
@is_root
def add_student(name):
print '添加信息。。'
add_student('redhat')