1. 程式人生 > >廖雪峰還是挺靠譜的

廖雪峰還是挺靠譜的

開始跟蹤廖雪峰的教程..........................

跟著練習做,有點小程式,自己用了幾個辦法,隨手記錄下

迴圈部分的列印名字練習:

#1 主要考慮到題目要求是打印出 Hello,xxx! 並沒有空格,  所以要考慮直接列印name,'!'會變成 xxx !

for name in L:
    name ='Hello,'+ name+'!'
    print(name)

#證明不會改變原資料的值
print(L)


#2 結合前一個章節的學習

for name in L:
    print('Hello,%s!' % name)

學到dict了,對比list 暫時還不能理解為什麼dict會查詢速度塊,特別是"直接根據名字查詢成績,無論這個表有多大,查詢速度都不會變慢。"根本不能理解啊.

按邏輯來講,或者過程程式設計的感覺來說,list不是先迴圈比較名字對不對,得到名字後,記錄此時查到的名字的序號,然後直接調出成績裡該序號下的分數.那麼在dict裡,不也是要比對名字對不對,然後直接輸出改名字後對應的分數. 這個查詢過程如果不涉及演算法,就是從頭到尾的一個一個比,怎麼會不受表的大小影響,查詢時間怎麼能穩定咧?

然後是遞迴函式的作業

# 漢諾塔的移動可以用遞迴函式非常簡單地實現。

# 請編寫move(n, a, b, c)函式,它接收引數n,表示3個柱子A、B、C中第1個柱子A的盤子數量,
# 然後打印出把所有盤子從A藉助B移動到C的方法,

分析: 既然是用遞迴,那就一個一個開始做,

n==1時,自然就是A-->C 函式體是move(1,a,b,c)  打印出方法就是 print(a,'-->',c)

n==2時,A-->B,A-->C,B-->C 那就是

move(1,a,c,b)

move(1,a,b,c)

move(1,b,a,c)

通過調換位置引數得到列印方法

當n>=3時  這時不用去細化考慮怎麼設計移動,只要聰明的把n個盤子當成n-1個盤子(當成一個盤子)和1個盤子

那就是依然是在解決兩個盤子的問題. 所以步奏是

move(n-1,a,c,b)

move(1,a,b,c)

move(n-1,b,a,c)

跟n==2時完全一樣,這就行了.

隨便計算下不同盤子數所需要的步數

i=0
def move(n,a,b,c):
    global i
    if n==1:
        print(a,'-->',c)
        i+=1
    else:
        move(n-1,a,c,b)
        move(1,a,b,c)
        move(n-1,b,a,c)

move(5,'A','B','C')
print("共需要移動%d次" %i)

map/reduce 作業1

def normalize(name):
    return  name[0].upper()+name[1::].lower()
L1 =['ADadM','LIsa','barT']
L2 = list(map(normalize,L1))
print(L2)

作業2
from functools import reduce
def prod(L):
    def multi(x,y)
        return x*y
    return reduce(multi,L)
print('3*5*7*9=',prod([3,5,7,9]))