Python3高阶函数习题解析
Hello,大家好,小编最近在学习廖雪峰老师官网的Python3,想通过解答每节知识点后的练习题的的方式来检验自己的学习成果,也希望能帮助和小编一样的小白解决心中的疑惑,大家共同进步。
(1)map/reduce练习题:
1,利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']:
代码如下:
def normalize(name):
name = name[0].upper()+name[1:].lower() #首字母大写,其余字母小写
return name
L1 = ['adam', 'LISA', 'barT']
L2 = list(map(normalize, L1))
print(L2)
2,Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list并利用reduce()求积:
代码部分:
def prod(L):
sum = 1;
for i in L:
sum = sum *i
return sum
print('3 * 5 * 7 * 9 =', prod([3, 5, 7, 9]))
if prod([3, 5, 7, 9]) == 945:
print('测试成功!')
else:
print('测试失败!')
3,利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456
代码部分:
from functools import reduce
def str2float(s):
def fun(x,y):
return x*10+y
n = s.index(".") #获取“.”所在的位置
s1 =list(map(int,[x for x in s[:n]])) #将整数部分的字符化成整数类型的列表
s2 =list(map(int,[x for x in s[n+1:]])) #将小数部分的字符化成整数类型的列表
return reduce(fun,s1)+reduce(fun,s2)/10**len(s2)
#利用reduce将整数部分与小数部分加起来(**表示阶乘)
(2)filter练习题:
回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数:
代码部分:
def is_palindrome(n):
s =int(str(n)[::-1]) #先将整数n转换为字符串形式,[::-1]是指将字符串倒叙排列,然后再转换 #为整数
if s==n: #如果转换前后俩值相等则是回数
return s
# 测试:
output =filter(is_palindrome,range(1,1000))
(3)sorted练习题:
假设我们用一组tuple表示学生名字和成绩:L =[('Bob',75), ('Adam',92), ('Bart',66), ('Lisa',88)]
请用sorted()对上述列表分别按名字排序:
代码部分:
# -*- coding: utf-8 -*-
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_name(t):
return t[0]
L2 = sorted(L, key=by_name)
print(L2)
再按成绩从高到低排序:
代码部分:
def by_score(t):
return -t[1] #先取出成绩,然后成绩反方向排列
L2 = sorted(L, key = by_score)
print(L2)
或者:
def by_score(t):
return t[1]
L2 = sorted(L, key = by_score, reverse = True)
print(L2)
综上这就是在廖雪峰老师的官网Python3中的高阶函数练习题了。大家有什么不懂得地方欢迎留言,如果小编哪里写错了或者您有更好的解决方案,请联系小编吧!小编期望与您共同进步。