1. 程式人生 > >python函數語言程式設計—高階函式練習題

python函數語言程式設計—高階函式練習題

俗話說:光說不練假把式……學而不思則罔……近來在跟著廖雪峰前輩的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()排序的關鍵在於實現一個對映函式。