2018年11月22日 星期四

python - 習題 內置函數 map


#用map 來處理字符串列表,把列表中所有人都變成 貴賓,
#如王小民_貴賓#解題方式有兩種
#第一種name = ["王小民",'李小白','陳小心']
def func(item):
    return  item +'貴賓'   #ret 是迭代器ret = map(func,name)
for  i in ret :
    print(i)

#第二種 匿名函數
ret = map(lambda  item:item + '_貴賓',name )
print(list(ret))
執行結果:
王小民貴賓
李小白貴賓
陳小心貴賓
['王小民_貴賓', '李小白_貴賓', '陳小心_貴賓']

#用filter函數處理數字列表,將列表中所有的偶數篩選出來
#兩種方法name = [1,2,3,4,5,6,7,8,9]
def func(x):
    if x%2 == 0:
        return  True
ret = filter(func,name) #ret 是迭代器
print(list(ret))

#另外方法
ret = filter(lambda x: x% 2 == 0,name)
ret = filter(lambda x: True if x%2 == 0 else False,name)
print(list(ret))
執行結果:
[2, 4, 6, 8]
[2, 4, 6, 8]

#主要內容輸入特定數字顯示該行行數內容,每五行為一單位
#例如輸入1,顯示出1 2 3 4 5 6 輸入2 6 7 8 9 10 .....等
#運行程式,先將內容讀到記憶體中,用列表儲存
#創建一個叫egg的文件 內有20個行以上內容
with open('egg',encoding='utf-8') as f:
l = f.readlines() # readlines 可逐行讀取
page_num = int(input('請輸入頁數:'))
pages,mod = divmod(len(l),5)
#求有多少頁,有沒有剩餘的行數
# len 返回長度數量,divmod 可以A除以B (被除數,除數)
if mod :
#如果有剩餘的行數,那麼頁數加一
pages += 1 #一共有多少頁
if page_num > pages or page_num <= 0 :
#用戶輸入的頁數大於總數或者小於等於0    
print('輸入有誤')
elif page_num == pages and mod != 0 :
#如果用戶輸入的頁碼是最後一頁,且之前有過剩餘行數
for i in range(mod):
print(l[(page_num-1)*5 + i].strip())
#只輸出這一頁上剩餘的行
else :
for i in range(5):#正常情況,輸出5行
print(l[(page_num-1)*5 +i].strip())

執行結果:
請輸入頁數:1
1
2
3
4
5



#寫一個小字典
# name對應股票名子
# shares 對應多少股
# price對應股票的價格

portfolio = [
    {'name': 'IBM', 'shares': 100, 'price': 91.1},    
    {'name': 'AAPL', 'shares': 50, 'price': 543.22},    
    {'name': 'FB', 'shares': 200, 'price': 21.09},    
    {'name': 'HPQ', 'shares': 35, 'price': 31.75},    
    {'name': 'YHOO', 'shares': 45, 'price': 16.35},    
    {'name': 'ACME', 'shares': 75, 'price': 115.65}
]

# .計算購買每支股票的總價ret = map(lambda  dic :{dic['name']:
                            round(dic['shares']*dic['price'],2)},portfolio)
print(list(ret))

# .用filter過濾出,單價大於100的股票有哪些
rett = filter(lambda dic:True if dic['price']>100 else False,portfolio)
print(list(rett))
# 另外方法rettt = filter(lambda  dic:dic['price']>100,portfolio)
print(list(rettt))
執行結果:
[{'IBM': 9110.0}, {'AAPL': 27161.0}, {'FB': 4218.0}, {'HPQ': 1111.25}, {'YHOO': 735.75}, {'ACME': 8673.75}]

[{'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'ACME', 'shares': 75, 'price': 115.65}]
[{'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'ACME', 'shares': 75, 'price': 115.65}]


沒有留言:

張貼留言