python函数式编程—高阶函数练习题

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/sophies671207/article/details/79283287

俗话说:光说不练假把式……学而不思则罔……近来在跟着廖雪峰前辈的python教程学习,做一些题目练习一下

一、python高阶函数

1.利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam’, ‘LISA’, ‘barT’],输出:[‘Adam’, ‘Lisa’, ‘Bart’]:

#函数代码
def  standards(s):
    t='0'
    t=s.lower()  #将s全部小写
    t=t.capitalize() #将t首字母大写
    print(t)
#测试代码
list(map(standards,['adam','LISA','barT']))

备注:这里运用了map函数,map函数的两个输入参数分别是用到的函数和处理的序列,map函数在处理序列方面极为方便。

2.回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数

def equal(a,b):  #判断两个字母是否相等
    return a==b
def is_palindrome(n):   #判断是否是回数
    i=0
    s=str(n)            #把数字转化为字符串
    for i in range(len(s)-1):   #逐位比较是否相等
        if equal(s[i],s[len(s)-i-1]):
            continue
        else:
            return False   #一旦出现不相等,返回False
    return True   #如果全部相等,返回True
#测试代码
output = filter(is_palindrome, range(1, 1000))
print('1~1000:', list(output))
if list(filter(is_palindrome, range(1, 200))) == [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]:
    print('测试成功!')
else:
    print('测试失败!')

备注 :
Python内建的filter()函数用于过滤序列,filter()接收一个函数和一个序列。filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素

3.练习:假设我们用一组tuple表示学生名字和成绩:L = [(‘Bob’, 75), (‘Adam’, 92), (‘Bart’, 66), (‘Lisa’, 88)]请用sorted()对上述列表分别按名字排序:

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_name(t):
     t=sorted(t[0], key=str.lower)
     return t
L2 = sorted(L, key=by_name)
print(L2)
#运行结果
[('Adam', 92), ('Bob', 75), ('Bart', 66), ('Lisa', 88)]

再按成绩从高到低排序:

L = [(‘Bob’, 75), (‘Adam’, 92), (‘Bart’, 66), (‘Lisa’, 88)]

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_score(t):
     t=sorted(range(t[1]),key=abs)
     #这里不能直接用t[1],t[1]是int型,会报错TypeError: 'int' object is not iterable,需加range()进行迭代
     return t
L2 = sorted(L, key=by_score)
print(L2)
#运行结果
[('Bart', 66), ('Bob', 75), ('Lisa', 88), ('Adam', 92)]

备注:sorted()函数可以用于排序,可以通过设置key参数实现自定义的排序。用sorted()排序的关键在于实现一个映射函数。

猜你喜欢

转载自blog.csdn.net/sophies671207/article/details/79283287