if測試的一般形式:
if-elif-else語法舉例(Python中的多路分支):
- myname='Sophia'
- if myname=='Jane':
- print "The is the first sister"
- elif myname=='Ella':
- print'This is the second sister'
- else:
- print 'This is Sophia'
python的代碼塊分隔符:
- x=1
- if x:
- y=2
- if y:
- print'block2'
- print'block1'
- print 'block0'
以上面這段代碼爲例,包含三個模塊:第一個完全沒有縮進,第二個縮進四格,第三個縮進八格,這裏注意,python不在乎你怎麼縮進代碼。只在乎縮進是否一致!!!由此我們終於可以知道了,爲什麼if不需要C++中{}的約束,也不需要matlab中類似endif的約束了,因爲它需要的知識相同縮進。相對應的,如果你硬要在if外面加個大括號反倒有語法錯誤了!
- 可以橫跨數行的語法:
- 另外在做語句判定時,我們不得不講的是邏輯真值判定,這裏有三個操作:and or not
我們來看些例子:
- 1 and 2
- 2
- >>> 1 and 0
- 0
- >>> 0 and 1
- 0
- >>> 5 and 6
- 6
- >>> 6 and 5
- 5
- >>> 1<2 and 2>3
- False
- >>> 1<2 and 2<3
- True
- >>> 1<2 , 2>3
- (True, False)
- >>>
- >>>
- >>> 2 or 3, 3 or 2, 1 or 0, 0 or 0 #return left operand if true
- (2, 3, 1, 0)
- >>> 2 and 3, 3 and 2, 1 and 0, 0 and 1 #return left operand if false
- (3, 2, 0, 0)
最後,總結一下本小結的知識要點,答案都在上面,請大家自行練習:
1. while循環
while循環的一般格式:
for example:
- break,continue,pass,else:
舉個例子:
- def fun1():
- print 'run fun1'
- def fun2():
- print 'run fun2'
- x='Sophia'
- while x:
- if len(x)%2:
- fun1()
- else:
- fun2()
- x=x[1:]
- if len(x)<=1:
- break
- print'end'
運行結果:
- run fun2
- run fun1
- run fun2
- run fun1
- run fun2
- end
2. for循環
for循環的一般語法:
example1:
- sum = 0
- for x in [1,2,3,4]:
- sum = sum+x;
- print sum
- S=('Sophia','test','prog')
- for x in S:
- print x,
結果:
- >>>
- 10
- Sophia test prog
example2:
- a = []
- for i in range(10):
- a.append(i)
- print a
- S='Sophia'
- b=[]
- i=0
- while i<len(S):
- b.append(S[i])
- i+=1
- print b
- i=0
- for j in range(1,len(S)-1):
- if b[j]<b[j-1]:
- print a[i]
- i+=1
結果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
['S', 'o', 'p', 'h', 'i', 'a']
2
- 嵌套循環:
- s1=[1,2]
- s2='scam'
- res=[]
- for x in s1:
- for x in s2:
- res.append(x)
- print res
結果:
['s', 'c', 'a', 'm', 's', 'c', 'a', 'm']
- 現在我們引入python中文件打開的方式,首先說下暴力方式:
- x=1
- if x:
- y=2
- if y:
- print'block2'
- print'block1'
- print 'block0'
for循環進行文件迭代:
這就是傳說中的文件迭代器,當然還存在其他的迭代器,比如字典有字典的迭代器,如上一節中所講:
- 循環計數器:range
range常用在for循環中產生索引,也可以用在需要整數列表的任何地方:
>>> range(5),range(2,5),range(0,10,2)
([0, 1, 2, 3, 4], [2, 3, 4], [0, 2, 4, 6, 8])
- 非完全遍歷:
- >>> S='Sophia'
- >>> range(0,len(S),2)
- [0, 2, 4]
- >>> for i in range(0,len(S),2):
- print S[i]
- S
- p
- i
- 並行遍歷:zip和map
zip創建配對後元組列表:
map與zip的唯一不同是,map用類似的方法把序列的元素配對後,爲較短的序列以None補齊。
另外還可以用zip構造字典:
- keys = ['a','b','c']
- vals = [1,2,3]
- Dic={}
- for (k,v) in zip(keys,vals):
- Dic[k]=v
結果:
>>>Dic
{'a': 1, 'c': 3, 'b': 2}
- 偏移元素:enumerate
- S = 'Spam'
- offset=0
- for item in S:
- print item, 'appears at offset', offset
- offset+=1
- #same function can be realized by enumerate:
- E = enumerate(S)
- print E.next()
- print E.next()
- print E.next()
- print E.next()
結果:
enumerate函數返回一個生成器對象,該對象有一個next方法,每次列表遍歷時,會返回一個(index,value)的元組。
之前有朋友一直在問,Python的語法即便非常清晰,其預置功能數量依然驚人:內置函數和異常、預定義對象屬性和方法、標準庫模塊等。我們之前只談到了皮毛而已,那麼困擾初學者的問題來了:怎樣找到這些內置工具呢?本節提供了一些python可用的文檔資源。
表1. python文檔資源
#註釋、dir函數和help函數之前我們已講過,不予贅述,這裏我們來看看其他幾項。
- __doc__是自動附加在對象上的文檔,而且在運行時還可保存查看(類似#),從語法上來說,這類註釋是寫成字符串,放在模塊文件、函數積累語句的頂端,在任何可執行代碼前的。python會自動封裝這個字符串。
- PyDoc:HTML報表:PyDoc提供的GUI接口可以將報表通過HTML網頁格式來呈現。
- 標準手冊集:ActivePython27.chm(不同版本有不同名稱)
最後呢,還要給大家奉送上一些常見陷阱:
- 不要忘記冒號
- 從第一行開始寫程序
- 空白行在交互模式提示符下非常significant
- 同一模塊內縮進一致
- 不要嘗試在Python中寫C代碼,比如if (x==1):其實語法上沒關係,但是是多餘的,另外語句後不要打分號
- 推薦使用簡單的for循環,而不是while和range。因爲for循環速度比較快,有時比等效的while快兩倍