1. 程式人生 > >day17:遞迴函式

day17:遞迴函式

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,