廖雪峰還是挺靠譜的
開始跟蹤廖雪峰的教程..........................
跟著練習做,有點小程式,自己用了幾個辦法,隨手記錄下
迴圈部分的列印名字練習:
#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]))