條件語句
示例
太簡(jiǎn)單了,上個(gè)實(shí)例
points = 174
if points <= 50:
? ? result = "Congratulations! You won a wooden rabbit!"
elif points <= 150:
????result = "Oh dear, no prize this time."
elif points <= 180:
????result = "Congratulations! You won a wafer-thin mint!"
else:
????result = "Congratulations! You won a penguin!"
print(result)
輸出:
Congratulations! You won a wafer-thin mint!
真假值
如果在if?語句中使用非布爾對(duì)象代替布爾表達(dá)式,Python 將檢查其真假值,判斷是否運(yùn)行if下的縮進(jìn)區(qū)域代碼。
以下是在 Python 中被視為 False 的大多數(shù)內(nèi)置對(duì)象:
定義為 false 的常量:None?和?False
任何數(shù)字類型的零:0、0.0、0j、Decimal(0)、Fraction(0, 1)
空序列和空集合:””、()、[]、{}、set()、range(0)
示例
errors =3
if errors:
?????print("You have {} errors to fix!".format(errors))
else:
?????print("No errors to fix!")
輸出:因?yàn)閑rrors不等0,所以為True,輸出第一種情況
循環(huán)語句
Python 有兩種類型的循環(huán):for?循環(huán)和?while?循環(huán)。for?循環(huán)用來遍歷可迭代對(duì)象。while循環(huán)判斷符合條件的情況下則進(jìn)行循環(huán),否則跳出循環(huán)。
for循環(huán)
示例:
cities = ['new york city','mountain view','chicago','los angeles']
for city in cities:? ?
????print(city.title())
For 循環(huán)的組成部分
循環(huán)的第一行以關(guān)鍵字?for?開始,表示這是一個(gè)?for?循環(huán)
然后cities為正在被遍歷的可迭代對(duì)象,并且用迭代變量表示當(dāng)前正在被處理的可迭代對(duì)象的元素。在此示例中,迭代變量?city?在第一次迭代時(shí)將是“new york city”,在第二次迭代時(shí)將是“mountain view。
for?循環(huán)頭部始終以英文冒號(hào)?:?結(jié)束。
for?循環(huán)頭部之后的是在此?for?循環(huán)的每次迭代時(shí)運(yùn)行的縮進(jìn)代碼塊。在此塊中,我們可以使用迭代變量訪問當(dāng)前正在被處理的元素的值。
range函數(shù)
for循環(huán)經(jīng)常配合range()進(jìn)行使用,它一個(gè)內(nèi)置函數(shù),用于創(chuàng)建不可變的數(shù)字序列。它有三個(gè)參數(shù),必須都為整數(shù)。
range(start=0, stop, step=1)
Start是該序列的第一個(gè)數(shù)字,stop比該序列的最后一個(gè)數(shù)字大 1,step是該序列中每個(gè)數(shù)字之間的差。如果未指定的話,start默認(rèn)為 0,step?默認(rèn)為 1(即上述?=0和?=1)。
range中的參數(shù)可以省略,省略的參數(shù)就是用默認(rèn)值,規(guī)則如下:
如果你在?range()?的括號(hào)里指定一個(gè)參數(shù),它將用作 'stop' 的值:
? ??E.g.?list(range(4))?返回?[0, 1, 2, 3]
如果你在?range()?的括號(hào)里指定兩個(gè)參數(shù),它們將用作 'start' 和 'stop' 的值:
?????E.g.list(range(2, 6))?返回?[2, 3, 4, 5]
或者你可以為三個(gè)參數(shù) 'start、stop' 和 'step' 均指定一個(gè)值。?
? ??E.g.?list(range(1, 10, 2))?返回?[1, 3, 5, 7, 9]
whil循環(huán)
For?循環(huán)是一種“有限迭代”,意思就是循環(huán)主體將運(yùn)行預(yù)定義的次數(shù)。這與“無限迭代”循環(huán)不同,無限迭代循環(huán)是指循環(huán)重復(fù)未知次數(shù),并在滿足某個(gè)條件時(shí)結(jié)束,while?循環(huán)正是這種情況。
示例
card_deck = [4, 11, 8, 5, 13, 2, 8, 10]
hand = []
#當(dāng)hand里的所有數(shù)值相加起來小于等于17,進(jìn)行循環(huán)
while sum(hand)? <=17:
#從card_deck取出最后一個(gè)數(shù),并從card_deck中刪除,隨后添加到hand
????hand.append(card_deck.pop())
While?循環(huán)的組成部分
第一行以關(guān)鍵字?while?開始,表示這是一個(gè)?while?循環(huán)。
然后是要檢查滿足循環(huán)的條件。在此示例中是?sum(hand) <= 17。
while?循環(huán)頭部始終以冒號(hào)?:?結(jié)束。
該頭部之后的縮進(jìn)部分是?while?循環(huán)的主體。如果?while?循環(huán)的條件為 true,該循環(huán)的主體將被執(zhí)行。每次運(yùn)行循環(huán)主體時(shí),條件將被重新評(píng)估。這個(gè)檢查條件然后運(yùn)行循環(huán)的流程將重復(fù),直到該表達(dá)式變成 false。
break、continue
有時(shí)候我們需要更精準(zhǔn)地控制何時(shí)循環(huán)應(yīng)該結(jié)束,或者跳過某個(gè)迭代。在這些情況下,我們使用關(guān)鍵字?break?和?continue,這兩個(gè)關(guān)鍵字可以用于?for?和?while?循環(huán)。
1.break?使循環(huán)終止
2.continue?跳過本次的循環(huán)迭代
Zip 和 Enumerate
Zip
zip?返回一個(gè)將多個(gè)可迭代對(duì)象組合成一個(gè)元組序列的迭代器。每個(gè)元組都包含所有可迭代對(duì)象中該位置的元素。例如,
list(zip(['a', 'b', 'c'], [1, 2, 3]))?
將輸出?[('a', 1), ('b', 2), ('c', 3)].
可以如下所示地用?for?循環(huán)拆封每個(gè)元組。
letters = ['a', 'b', 'c']
nums = [1, 2, 3]
for letter, numin zip(letters, nums):
????print("{}: {}".format(letter, num))
除了可以將兩個(gè)列表組合到一起之外,還可以使用星號(hào)拆封列表。
some_list = [('a',1), ('b',2), ('c',3)]
letters, nums = zip(*some_list)
Enumerate
enumerate?是一個(gè)會(huì)返回元組迭代器的內(nèi)置函數(shù),這些元組包含列表的索引和值。當(dāng)你需要在循環(huán)中獲取可迭代對(duì)象的每個(gè)元素及其索引時(shí)使用。
letters = ['a', 'b', 'c', 'd', 'e']
for i, letterin enumerate(letters):
????print(i, letter)
輸出:
0 a 、1 b、 2 c 、3 d 、4 e
列表推導(dǎo)式
在 Python 中,你可以使用列表推導(dǎo)式快速簡(jiǎn)練地創(chuàng)建列表。下面是之前的一個(gè)示例:
capitalized_cities = []
for cityin cities:
????capitalized_cities.append(city.title())
可以簡(jiǎn)寫為:capitalized_cities = [city.title() for city in cities]
列表推導(dǎo)式中的條件語句
你還可以向列表推導(dǎo)式添加條件語句。在可迭代對(duì)象之后,你可以使用關(guān)鍵字?if?檢查每次迭代中的條件。
squares = [x**2 for x in range(9) if x %2==0]
如果你要添加 else,則需要將條件語句移到列表推導(dǎo)式的開頭,直接放在表達(dá)式后面,如下所示。
squares = [x**2 if x %2==0 else x +3 for x in range(9)]