python函數語言程式設計—高階函式練習題
阿新 • • 發佈:2018-12-17
俗話說:光說不練假把式……學而不思則罔……近來在跟著廖雪峰前輩的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()排序的關鍵在於實現一個對映函式。