程序员

Python3高阶函数习题解析

2018-07-06  本文已影响0人  阿Q说代码

        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中的高阶函数练习题了。大家有什么不懂得地方欢迎留言,如果小编哪里写错了或者您有更好的解决方案,请联系小编吧!小编期望与您共同进步。

上一篇下一篇

猜你喜欢

热点阅读