1. 程式人生 > >Python筆記(四)——條件判斷和迴圈語句

Python筆記(四)——條件判斷和迴圈語句

目錄

一、Python之if語句

任務

二、Python之 if-else

任務

三、Python之 if-elif-else

請思考下面的程式碼:

任務

四、Python之 for迴圈

任務

五、Python之 while迴圈

任務

六、Python之 break退出迴圈

任務

七、Python之 continue繼續迴圈

任務

八、Python之 多重迴圈

任務


一、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和空格,否則很容易造成因為縮排引起的語法錯誤。

注意: if 語句後接表示式,然後用:表示程式碼塊開始。

如果你在Python互動環境下敲程式碼,還要特別留意縮排,並且退出縮排需要多敲一行回車:

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

任務

如果成績達到60分或以上,視為passed。

假設Bart同學的分數是75,請用if語句判斷是否能打印出 passed:

二、Python之 if-else

當 if 語句判斷表示式的結果為 True 時,就會執行 if 包含的程式碼塊:

if age >= 18:
    print 'adult'

如果我們想判斷年齡在18歲以下時,打印出 'teenager',怎麼辦?

方法是再寫一個 if:

if age < 18:
    print 'teenager'

或者用 not 運算:

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 後面有個“:”。

任務

如果成績達到60分或以上,視為passed,否則視為failed。

假設Bart同學的分數是55,請用if語句打印出 passed 或者 failed:

三、Python之 if-elif-else

有的時候,一個 if ... else ... 還不夠用。比如,根據年齡的劃分:

條件1:18歲或以上:adult 
條件2:6歲或以上:teenager 
條件3:6歲以下:kid

我們可以用一個 if age >= 18 判斷是否符合條件1,如果不符合,再通過一個 if 判斷 age >= 6 來判斷是否符合條件2,否則,執行條件3:

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,執行完對應的程式碼塊,後面的條件判斷就直接忽略,不再執行了。

請思考下面的程式碼:

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

當 age = 8 時,結果正確,但 age = 20 時,為什麼沒有打印出 adult?

如果要修復,應該如何修復?

答:將年齡從大到小排列下來

任務

如果按照分數劃定結果:

    90分或以上:excellent

    80分或以上:good

    60分或以上:passed

    60分以下:failed

請編寫程式根據分數列印結果。

四、Python之 for迴圈

list或tuple可以表示一個有序集合。如果我們想依次訪問一個list中的每一個元素呢?比如 list:

L = ['Adam', 'Lisa', 'Bart']
print L[0]
print L[1]
print L[2]

如果list只包含幾個元素,這樣寫還行,如果list包含1萬個元素,我們就不可能寫1萬行print。

這時,迴圈就派上用場了。

Python的 for 迴圈就可以依次把list或tuple的每個元素迭代出來:

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

注意:  name 這個變數是在 for 迴圈中定義的,意思是,依次取出list中的每一個元素,並把元素賦值給 name,然後執行for迴圈體(就是縮排的程式碼塊)。

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

任務

班裡考試後,老師要統計平均成績,已知4位同學的成績用list表示如下:

L = [75, 92, 59, 68]

請利用for迴圈計算出平均成績。

L = [75, 92, 59, 68]
sum = 0.0
for score in L:
    sum += score
print (sum / 4)

五、Python之 while迴圈

和 for 迴圈不同的另一種迴圈是 while 迴圈,while 迴圈不會迭代 list 或 tuple 的元素,而是根據表示式判斷迴圈是否結束。

比如要從 0 開始列印不大於 N 的整數:

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迴圈的退出條件。

任務

利用while迴圈計算100以內奇數的和。

sum = 0
x = 1
while x < 100:
    sum += x 
    x = x + 2
print (sum)

六、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語句退出迴圈,這樣也可以實現迴圈的結束。

任務

利用 while True 無限迴圈配合 break 語句,計算 1 + 2 + 4 + 8 + 16 + ... 的前20項的和。

sum = 0
x = 1
n = 1
while True:
    if n > 20:
        break
    sum += x
    x = 2*x
    n = n + 1
print (sum)

七、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

任務

對已有的計算 0 - 100 的while迴圈進行改造,通過增加 continue 語句,使得只計算奇數的和:

sum = 0
x = 1
while True:
    sum = sum + x
    x = x + 1
    if x > 100:
        break
print sum
sum = 0
x = 0
while True:
    x = x + 1
    if x > 100:
        break
    if x % 2 == 0:
        continue
    sum += x
print (sum)

八、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

任務

對100以內的兩位數,請使用一個兩重迴圈打印出所有十位數數字比個位數數字小的數,例如,23(2 < 3)。

for x in [ 1,2,3,4,5,6,7,8,9 ]:
    for y in [ 0,1,2,3,4,5,6,7,8,9 ]:
        if x < y:
            print (x * 10 + y)