‘’’
分数积
编写一个函数 输入为偶数时调用1/2+1/4+…+1/n
输入为奇数时调用1/3+1/5+…+1/n
‘’’
#1.偶函数
def dSum(n):
x=0
for i in range(2,n+2,2):
x+=1/i
return x
def oSum(n):
x=0
for i in range(1,n+2,2):
x+=1/i
return x
def main():
num=int(input(‘请输入一个数:’))
if num%2==0:
w=dSum(num)
print(‘偶数积为:%f’%w)
else:
w=oSum(num)
print(‘奇数积为:%f’%w)
main()
‘’’
递归函数
‘’’
def main(n):
print(‘进入第%d层’%n)
if n==3:
print(‘到达潜意识区’)
else:
main(n+1)
print(‘从第%d层醒来’%n)
def main(n):
print(‘进入第%d层’%n)
if n==3:
print(‘到达潜意识区’)
else:
def main(n):
print(‘进入第%d层’ % n)
if n == 3:
print(‘到达潜意识区’)
else:
def main(n):
print(‘进入第%d层’ % n)
if n == 3:
print(‘到达潜意识区’)
else:
# main(n+1)
print(‘从第%d层醒来’ % n)
# main(n+1)
print(‘从第%d层醒来’ % n)
# main(n+1)
print(‘从第%d层醒来’%n)
main(1)#第一次调用 进入第1层
#第二次调用 进入第2层
#第三次调用 进入第3层 到达潜意识区
#从第3层醒来 结束第三次调用
#从第2层醒来 结束第2次调用
#从第1层醒来 结束第1次调用
‘’’
阶乘
‘’’
def jc(x):
if x==1:
return 1
else:
return x*jc(x-1)#阶乘通式
‘’’
匿名函数
lambda [参数]:表达式
默认返回一个表达式
‘’’
#无参数
a=lambda :‘妈卖批’ #声明一个匿名函数并赋值给a
print(a()) #通过调用匿名函数打印输出
#有参数
s=lambda x: x3 #声明一个参数x
print(s(3))
#多个参数
s=lambda x,y: xy
print(s(3,4))
‘’’
矢量化的三元运算符
if 条件:
代码
else:
代码
条件成立的内容 if 条件 else 条件不成立的内容
‘’’
s=lambda x,y: x if x<=2 else y #如果x<=2 返回结果X否则y
print(s(3,4))
‘’’
字典排序
‘’’
dic={‘c’:1,‘b’:3,‘a’:2}
dic=sorted(dic.items(),key=lambda x:x[1],reverse=True) #排序,返回排序后的list 内置函数有返回值 默认KEY值
#reverse=True 逆序排序
#items()可以将一个字典转换为键值对的元组列表
#key=lambda x:x[0] 按照第0个元素排序
print(dic)
print({k:v for k,v in dic}) #字典推导式
list=[
{‘name’:‘ausam’,‘age’:‘18’},
{‘name’:‘bun’,‘age’:‘19’},
{‘name’:‘cus’,‘age’:‘20’}
]
list=sorted(list,key=lambda x:x[‘name’],reverse=True)
print(list)
‘’’
高阶函数
‘’’
#map
list01=[1,2,3,4,5]
new_list=map(lambda x:x*2,list01) #根据函数给指定的序列做映射然后返回一个新的map对象
print(list(new_list)) #将map对象转化为list集合
for i in new_list:
print(i)
#filter:过滤不符合的元素 将符合的元素组成新的序列
list01=[1,3,5,7,9]
new_list=filter(lambda x:x>=3,list01)
print(list(new_list))
for i in new_list:
print(i)
#reduce #对序列中所用的元素进行合并 可以给定一个初始值
list02=[2,3,6,8,9,21]
from functools import reduce
new_list=reduce(lambda x,y:x*y,list02)
print(new_list)
‘’’
map filter reduce 需要通过序列显示打印输出
案例一:格式化用户的英文名,要求首字母大小,其它字母小写
案例二:将用户英文名、年龄、性别三个集合的数据结合到一起,形成一个集合
案例三:过滤性别为男的用户
案例四:求性别为男的用户的平均年龄
‘’’
name=[‘suma’,‘tom’,‘jon’,‘yed’]
age=[12,13,15,16]
sex=[‘m’,‘w’,‘m’,‘w’]
#1.格式化用户的英文名,要求首字母大小,其它字母小写
new_name=map(lambda x:x.title(),name)
new_name=list(new_name) #返回新的map对象只能通过序列显示打印
print(new_name)
#2.将用户英文名、年龄、性别三个集合的数据结合到一起,形成一个集合
user=map(lambda x,y,z:(x,y,z),name,age,sex)
user=list(user)
print(user)
#3.过滤性别为男的用户
user=filter(lambda x:x[2]==‘m’,user) #已经生成了新的对象user
user=list(user)
print(user)
#求性别为男的用户的平均年龄
from functools import reduce
user_age=reduce(lambda x,y:x[1]+y[1],user)
user_age=reduce(lambda x,y:x+y[1],user,0)
print(user_age/len(user))