Python入門基礎之條件判斷、循環、dict和set

Python之if語句


好比,輸入用戶年齡,根據年齡打印不一樣的內容,在Python程序中,能夠用if語句實現:函數

age = 20
if age >= 18: print 'your age is', age print 'adult'
print 'END'

注意: Python代碼的縮進規則。具備相同縮進的代碼被視爲代碼塊,上面的3,4行 print 語句就構成一個代碼塊(但不包括第5行的print)。若是 if 語句判斷爲 True,就會執行這個代碼塊。測試

縮進請嚴格按照Python的習慣寫法:4個空格,不要使用Tab,更不要混合Tab和空格,不然很容易形成由於縮進引發的語法錯誤。spa

(tab在不一樣的操做系統平臺、不一樣的應用裏縮進的空格數是不一樣的,因此不建議用tab)操作系統

注意: if 語句後接表達式,而後用  表示代碼塊開始。code

若是你在Python交互環境下敲代碼,還要特別留意縮進,而且退出縮進須要多敲一行回車:對象

>>> age = 20
>>> if age >= 18: ... print 'your age is', age ... print 'adult' ... your age is 20 adult

 

Python之 if-else


當 if 語句判斷表達式的結果爲 True 時,就會執行 if 包含的代碼塊:blog

if age >= 18: print 'adult'

若是咱們想判斷年齡在18歲如下時,打印出 'teenager',怎麼辦?索引

方法是再寫一個 if:內存

if age < 18: print 'teenager'

或者用 not 運算:rem

if not age >= 18: print 'teenager'

細心的同窗能夠發現,這兩種條件判斷是「非此即彼」的,要麼符合條件1,要麼符合條件2,所以,徹底能夠用一個 if ... else ... 語句把它們統一塊兒來:

if age >= 18: print 'adult'
else: print 'teenager'

利用 if ... else ... 語句,咱們能夠根據條件表達式的值爲 True 或者 False ,分別執行 if 代碼塊或者 else 代碼塊。

注意: else 後面有個「:」。

問題:使用IDEL編譯Python代碼,自帶行縮進功能。所以每次輸入else: 都會出現:IndentationError: unindent does not match any outer indentation level問題 解決辦法:if前面雖然有>>>3個佔位符,可是if實際上仍是頂格,首行縮進爲0,因此在輸入else以前,使用Backspace,使else首行縮進爲0. 代碼: >>> score=55

>>> if score<=60: print 'Failed'

else: print 'Passed' Failed

 

Python之 if-elif-else


if age >= 18: print 'adult'
else: if age >= 6: print 'teenager'
    else: print 'kid'

這樣寫出來,咱們就獲得了一個兩層嵌套的 if ... else ... 語句。這個邏輯沒有問題,可是,若是繼續增長條件,好比3歲如下是 baby:

if age >= 18: print 'adult'
else: if age >= 6: print 'teenager'
    else: if age >= 3: print 'kid'
        else: print 'baby'

這種縮進只會愈來愈多,代碼也會愈來愈難看。

要避免嵌套結構的 if ... else ...,咱們能夠用 if ... 多個elif ... else ...的結構,一次寫完全部的規則:

if age >= 18: print 'adult'
elif age >= 6: print 'teenager'
elif age >= 3: print 'kid'
else: print 'baby'

elif 意思就是 else if。這樣一來,咱們就寫出告終構很是清晰的一系列條件判斷。

特別注意: 這一系列條件判斷會從上到下依次判斷,若是某個判斷爲 True,執行完對應的代碼塊,後面的條件判斷就直接忽略,再也不執行了。

 

Python之 for循環


list或tuple能夠表示一個有序集合。若是咱們想依次訪問一個list中的每個元素呢?好比 list。

Python的 for 循環就能夠依次把list或tuple的每一個元素迭代出來:

L = ['Adam', 'Lisa', 'Bart'] for name in L: print name

注意:  name 這個變量是在 for 循環中定義的,意思是,依次取出list中的每個元素,並把元素賦值給 name,而後執行for循環體(就是縮進的代碼塊)。

這樣一來,遍歷一個list或tuple就很是容易了。

 

Python之 while循環


N = 10 x = 0 while x < N: print x x = x + 1

while循環每次先判斷 x < N,若是爲True,則執行循環體的代碼塊,不然,退出循環。

在循環體內,x = x + 1 會讓 x 不斷增長,最終由於 x < N 不成立而退出循環。

若是沒有這一個語句,while循環在判斷 x < N 時老是爲True,就會無限循環下去,變成死循環,因此要特別留意while循環的退出條件。

 

Python之 break退出循環


用 for 循環或者 while 循環時,若是要在循環體內直接退出循環,可使用 break 語句。

好比計算1至100的整數和,咱們用while來實現:

sum = 0 x = 1
while True: sum = sum + x x = x + 1
    if x > 100: break
print sum

咋一看, while True 就是一個死循環,可是在循環體內,咱們還判斷了 x > 100 條件成立時,用break語句退出循環,這樣也能夠實現循環的結束。

 

Python之 continue繼續循環


在循環過程當中,能夠用break退出當前循環,還能夠用continue跳事後續循環代碼,繼續下一次循環。

假設咱們已經寫好了利用for循環計算平均分的代碼:

L = [75, 98, 59, 81, 66, 43, 69, 85] sum = 0.0 n = 0 for x in L: sum = sum + x n = n + 1
print sum / n

如今老師只想統計及格分數的平均分,就要把 x < 60 的分數剔除掉,這時,利用 continue,能夠作到當 x < 60的時候,不繼續執行循環體的後續代碼,直接進入下一次循環:

for x in L: if x < 60: continue sum = sum + x n = n + 1

 

Python之 多重循環


在循環內部,還能夠嵌套循環,咱們來看一個例子:

for x in ['A', 'B', 'C']: for y in ['1', '2', '3']: print x + y

x 每循環一次,y 就會循環 3 次,這樣,咱們能夠打印出一個全排列:

A1
A2
A3
B1
B2
B3
C1
C2
C3

 

Python之什麼是dict


咱們已經知道,list 和 tuple 能夠用來表示順序集合,例如,班裏同窗的名字:

['Adam', 'Lisa', 'Bart']

或者考試的成績列表:

[95, 85, 59]

可是,要根據名字找到對應的成績,用兩個 list 表示就不方便。

若是把名字和分數關聯起來,組成相似的查找表:

'Adam' ==> 95
'Lisa' ==> 85
'Bart' ==> 59

給定一個名字,就能夠直接查到分數。

Python的 dict 就是專門幹這件事的。用 dict 表示「名字」-「成績」的查找表以下:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }

咱們把名字稱爲key,對應的成績稱爲value,dict就是經過 key來查找 value。

花括號 {} 表示這是一個dict,而後按照 key: value, 寫出來便可。最後一個 key: value 的逗號能夠省略。

因爲dict也是集合,len() 函數能夠計算任意集合的大小:

>>> len(d) 3

注意: 一個 key-value 算一個,所以,dict大小爲3。

 

Python之訪問dict


咱們已經能建立一個dict,用於表示名字和成績的對應關係:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }

那麼,如何根據名字來查找對應的成績呢?

能夠簡單地使用 d[key] 的形式來查找對應的 value,這和 list 很像,不一樣之處是,list 必須使用索引返回對應的元素,而dict使用key:

>>> print d['Adam'] 95
>>> print d['Paul'] Traceback (most recent call last): File "index.py", line 11, in <module>
    print d['Paul'] KeyError: 'Paul'

注意: 經過 key 訪問 dict 的value,只要 key 存在,dict就返回對應的value。若是key不存在,會直接報錯:KeyError。

要避免 KeyError 發生,有兩個辦法:

一是先判斷一下 key 是否存在,用 in 操做符:

if 'Paul' in d: print d['Paul']

若是 'Paul' 不存在,if語句判斷爲False,天然不會執行 print d['Paul'] ,從而避免了錯誤。

二是使用dict自己提供的一個 get 方法,在Key不存在的時候,返回None:

>>> print d.get('Bart') 59
>>> print d.get('Paul') None

例子:

任務 根據以下dict: d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } 請打印出: Adam: 95 Lisa: 85 Bart: 59
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } print 'Adam:', d['Adam'] print 'Lisa:', d['Lisa'] print 'Bart:', d['Bart']

 

Python中dict的特色


dict的第一個特色是查找速度快,不管dict有10個元素仍是10萬個元素,查找速度都同樣。而list的查找速度隨着元素增長而逐漸降低。

不過dict的查找速度快不是沒有代價的,dict的缺點是佔用內存大,還會浪費不少內容,list正好相反,佔用內存小,可是查找速度慢。

因爲dict是按 key 查找,因此,在一個dict中,key不能重複。

dict的第二個特色就是存儲的key-value序對是沒有順序的!這和list不同:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }

當咱們試圖打印這個dict時:

>>> print d {'Lisa': 85, 'Adam': 95, 'Bart': 59}

打印的順序不必定是咱們建立時的順序,並且,不一樣的機器打印的順序均可能不一樣,這說明dict內部是無序的,不能用dict存儲有序的集合。

dict的第三個特色是做爲 key 的元素必須不可變,Python的基本類型如字符串、整數、浮點數都是不可變的,均可以做爲 key。可是list是可變的,就不能做爲 key。

能夠試試用list做爲key時會報什麼樣的錯誤。

不可變這個限制僅做用於key,value是否可變無所謂:

{ '123': [1, 2, 3],  # key 是 str,value是list
    123: '123',  # key 是 int,value 是 str
    ('a', 'b'): True  # key 是 tuple,而且tuple的每一個元素都是不可變對象,value是 boolean
}

最經常使用的key仍是字符串,由於用起來最方便。

 

Python更新dict


dict是可變的,也就是說,咱們能夠隨時往dict中添加新的 key-value。好比已有dict:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }

要把新同窗'Paul'的成績 72 加進去,用賦值語句:

>>> d['Paul'] = 72

再看看dict的內容:

>>> print d {'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 59}

若是 key 已經存在,則賦值會用新的 value 替換掉原來的 value:

>>> d['Bart'] = 60
>>> print d {'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 60}

 

Python之 遍歷dict


因爲dict也是一個集合,因此,遍歷dict和遍歷list相似,均可以經過 for 循環實現。

直接使用for循環能夠遍歷 dict 的 key:

>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } >>> for key in d: ... print key ... Lisa Adam Bart

因爲經過 key 能夠獲取對應的 value,所以,在循環體內,能夠獲取到value的值。

例子:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } for key in d: print key+":",d[key] #print key,":",d[key]

 

Python之什麼是set


dict的做用是創建一組 key 和一組 value 的映射關係,dict的key是不能重複的。

有的時候,咱們只想要 dict 的 key,不關心 key 對應的 value,目的就是保證這個集合的元素不會重複,這時,set就派上用場了。

set 持有一系列元素,這一點和 list 很像,可是set的元素沒有重複,並且是無序的,這點和 dict 的 key很像。

建立 set 的方式是調用 set() 並傳入一個 list,list的元素將做爲set的元素:

>>> s = set(['A', 'B', 'C'])

能夠查看 set 的內容:

>>> print s set(['A', 'C', 'B'])

請注意,上述打印的形式相似 list, 但它不是 list,仔細看還能夠發現,打印的順序和原始 list 的順序有多是不一樣的,由於set內部存儲的元素是無序的

由於set不能包含重複的元素,因此,當咱們傳入包含重複元素的 list 會怎麼樣呢?

>>> s = set(['A', 'B', 'C', 'C']) >>> print s set(['A', 'C', 'B']) >>> len(s) 3

結果顯示,set會自動去掉重複的元素,原來的list有4個元素,但set只有3個元素。

 

Python之 訪問set


因爲set存儲的是無序集合,因此咱們無法經過索引來訪問。訪問 set中的某個元素實際上就是判斷一個元素是否在set中。

例如,存儲了班裏同窗名字的set:

>>> s = set(['Adam', 'Lisa', 'Bart', 'Paul'])

咱們能夠用 in 操做符判斷:Bart是該班的同窗嗎?

>>> 'Bart' in s True

bart是該班的同窗嗎?

>>> 'bart' in s False

看來大小寫很重要,'Bart' 和 'bart'被認爲是兩個不一樣的元素。

 

Python之 set的特色


set的內部結構和dict很像,惟一區別是不存儲value,所以,判斷一個元素是否在set中速度很快。

set存儲的元素和dict的key相似,必須是不變對象,所以,任何可變對象是不能放入set中的。

最後,set存儲的元素也是沒有順序的。

set的這些特色,能夠應用在哪些地方呢?

星期一到星期日能夠用字符串'MON', 'TUE', ... 'SUN'表示。

假設咱們讓用戶輸入星期一至星期日的某天,如何判斷用戶的輸入是不是一個有效的星期呢?

能夠用 if 語句判斷,但這樣作很是繁瑣:

x = '???' # 用戶輸入的字符串
if x!= 'MON' and x!= 'TUE' and x!= 'WED' ... and x!= 'SUN': print 'input error'
else: print 'input ok'

注意:if 語句中的...表示沒有列出的其它星期名稱,測試時,請輸入完整。

若是事先建立好一個set,包含'MON' ~ 'SUN':

weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])

再判斷輸入是否有效,只須要判斷該字符串是否在set中:

x = '???' # 用戶輸入的字符串
if x in weekdays: print 'input ok'
else: print 'input error'

這樣一來,代碼就簡單多了。

 

Python之 遍歷set


因爲 set 也是一個集合,因此,遍歷 set 和遍歷 list 相似,均可以經過 for 循環實現。

直接使用 for 循環能夠遍歷 set 的元素:

>>> s = set(['Adam', 'Lisa', 'Bart']) >>> for name in s: ... print name ... Lisa Adam Bart

注意: 觀察 for 循環在遍歷set時,元素的順序和list的順序極可能是不一樣的,並且不一樣的機器上運行的結果也可能不一樣。

 

Python之 更新set


因爲set存儲的是一組不重複的無序元素,所以,更新set主要作兩件事:

一是把新的元素添加到set中,二是把已有元素從set中刪除。

添加元素時,用set的add()方法:

>>> s = set([1, 2, 3]) >>> s.add(4) >>> print s set([1, 2, 3, 4])

若是添加的元素已經存在於set中,add()不會報錯,可是不會加進去了:

>>> s = set([1, 2, 3]) >>> s.add(3) >>> print s set([1, 2, 3])

刪除set中的元素時,用set的remove()方法:

>>> s = set([1, 2, 3, 4]) >>> s.remove(4) >>> print s set([1, 2, 3])

若是刪除的元素不存在set中,remove()會報錯:

>>> s = set([1, 2, 3]) >>> s.remove(4) Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 4

因此用add()能夠直接添加,而remove()前須要判斷。

 

參考慕課網課程:http://www.imooc.com/learn/177

相關文章
相關標籤/搜索