day17:遞迴函式
阿新 • • 發佈:2018-12-14
1,遞迴函式是一個函式體系,非常的難
2,練習題一
# 3.用map來處理字串列表,把列表中所有人都變成sb,比方alex_sb name=['alex','wupeiqi','yuanhao','nezha'] # def func(item): # return item+"_sb" ret= map(lambda item:item+"_sb",name) # ret 是迭代器,這兒要注意一下,迭代器和可迭代物件是不一樣的,每個for迴圈的時候,可迭代物件都會自動轉換成一個迭代器,每次都是新的,
# 但是如果for迴圈迭代器的話,因為沒有轉化那一步,所以去一次就取沒了,不可以再取了。for i in ret: print(i) print(list(ret)) #只可以取一次,所以啥也取不到了 # print(list(i)) ['n', 'e', 'z', 'h', 'a', '_', 's', 'b'] 字串轉列表,迴圈完了i在外面可以用 執行結果: alex_sb wupeiqi_sb yuanhao_sb nezha_sb []
# 列表生成式也可以解決這個題 list1 = [item+"_sb" for item in name] print(list1) 執行結果: ['alex_sb', 'wupeiqi_sb', 'yuanhao_sb', 'nezha_sb']
3,練習題二,注意lambda表示式返回值那一塊兒,可以寫列表表示式,或者三元運算子判斷等,只要可以寫成一行的都可以用在lambda表示式裡面
# 4.用filter函式處理數字列表,將列表中所有的偶數篩選出來 num = [1,3,5,6,7,8] # def func(x): # return x%2 ==0 ret = filter(lambda x:x%2 ==0,num) print(list(ret)) print(list(ret)) # filter和map的返回值都是一個迭代器,這個比較容易混 執行結果: [6, 8] []
ret = filter(lambda x:True if x%2 ==0 else False,num) # 這樣不簡潔,但是隻是舉個例子,可以這樣寫 ret = filter(lambda x:[item+"_sb" for item in x],num) #這兒的x 要求是個可迭代的,列表啥的
4,練習題三:
# 自己的版本 with open('file.txt',encoding='utf-8') as f: my_list = f.readlines() # 一般情況下,我們不這樣讀,太耗費記憶體。 page = int(input(">>>")) line_num,last_page_len = divmod(len(my_list),5) if last_page_len: if page <=line_num and page > 0: for i in range(5): print(my_list[i+(page-1)*5].strip()) elif page == line_num+1: for i in range(last_page_len): print(my_list[i+(page-1)*5].strip()) else: print("invalid page") else: if page <=line_num and page > 0: for i in range(5): print(my_list[i+(page-1)*5].strip()) else: print("invalid page") # 老師的版本 with open('file.txt',encoding='utf-8') as f: my_list = f.readlines() # 一般情況下,我們不這樣讀,太耗費記憶體。 page_num = int(input(">>>")) pages,mod = divmod(len(my_list),5) if mod: pages +=1 if page_num > pages or page_num<=0: print('輸入有誤') elif page_num ==pages and mod != 0: for i in range(mod): print(my_list[(page_num-1)*5 +i].strip()) else: for i in range(5): print(my_list[(page_num - 1) * 5 + i].strip())
5,