? ??????Hello,大家好,小編最近在學(xué)習(xí)廖雪峰老師官網(wǎng)的Python3,想通過(guò)解答每節(jié)知識(shí)點(diǎn)后的練習(xí)題的的方式來(lái)檢驗(yàn)自己的學(xué)習(xí)成果,也希望能幫助和小編一樣的小白解決心中的疑惑,大家共同進(jìn)步。
(1)map/reduce練習(xí)題:
? ? ? ? 1,利用map()函數(shù),把用戶輸入的不規(guī)范的英文名字,變?yōu)槭鬃帜复髮?,其他小寫的?guī)范名字。輸入:['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()函數(shù)可以接受一個(gè)list并求和,請(qǐng)編寫一個(gè)prod()函數(shù),可以接受一個(gè)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('測(cè)試成功!')
else:
? ? print('測(cè)試失敗!')
????3,利用map和reduce編寫一個(gè)str2float函數(shù),把字符串'123.456'轉(zhuǎn)換成浮點(diǎn)數(shù)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]]))? ? #將整數(shù)部分的字符化成整數(shù)類型的列表
????s2 =list(map(int,[x for x in s[n+1:]]))? ??#將小數(shù)部分的字符化成整數(shù)類型的列表
????return reduce(fun,s1)+reduce(fun,s2)/10**len(s2)
#利用reduce將整數(shù)部分與小數(shù)部分加起來(lái)(**表示階乘)
(2)filter練習(xí)題:
????????回?cái)?shù)是指從左向右讀和從右向左讀都是一樣的數(shù),例如12321,909。請(qǐng)利用filter()篩選出回?cái)?shù):
代碼部分:
def is_palindrome(n):
????s =int(str(n)[::-1])? #先將整數(shù)n轉(zhuǎn)換為字符串形式,[::-1]是指將字符串倒敘排列,然后再轉(zhuǎn)換? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #為整數(shù)
????if s==n:? ? ? ? ? ? ? ?#如果轉(zhuǎn)換前后倆值相等則是回?cái)?shù)
????return s
# 測(cè)試:
output =filter(is_palindrome,range(1,1000))
(3)sorted練習(xí)題:
????假設(shè)我們用一組tuple表示學(xué)生名字和成績(jī):L =[('Bob',75), ('Adam',92), ('Bart',66), ('Lisa',88)]
請(qǐng)用sorted()對(duì)上述列表分別按名字排序:
代碼部分:
# -*- 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)
再按成績(jī)從高到低排序:
代碼部分:
def by_score(t):
? ? return -t[1]? ? ?#先取出成績(jī),然后成績(jī)反方向排列
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)
? ??????綜上這就是在廖雪峰老師的官網(wǎng)Python3中的高階函數(shù)練習(xí)題了。大家有什么不懂得地方歡迎留言,如果小編哪里寫錯(cuò)了或者您有更好的解決方案,請(qǐng)聯(lián)系小編吧!小編期望與您共同進(jìn)步。