【python?3】條件判斷和循環 --學習筆記

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:

代碼如下:

score = 75

if score >= 60:

??? print 'passed'


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:

代碼如下:

score = 55

if score >= 60:

??? print 'passed'

else:

??? print 'failed'


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?

如果要修復,應該如何修復?age=20

age=20

if age>=18:

?? print('adult')

elif age>=6:? ? #如果把age>=6放在age>=18前面,沒有判斷小于18情況,已經得出為 True,后面的條件判斷就直接忽略,不再執行了。

??? print('teenager')

else:

??? print('kid')

任務:

如果按照分數劃定結果:

90分或以上:excellent

80分或以上:good

60分或以上:passed

60分以下:failed

請編寫程序根據分數打印結果。

代碼如下:

score = 85

if score >= 90:

??? print 'excellent'

elif score >= 80:

??? print 'good'

elif score >= 60:

??? print 'passed'

else:

??? print 'failed'


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

n = 0

for score in L:

??? sum = sum + score

? ? n = n+1

print(sum/4)


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以內奇數的和。

100以內奇數的和

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項的和。

代碼如下:

正確代碼寫法
錯誤寫法

continue繼續循環

在循環過程中,可以用break退出當前循環,還可以用continue跳過后續循環代碼,繼續下一次循環。

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

平均分

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

跳進下一次循環

任務:

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

sum = 0

x = 1

while True:

sum = sum + x

x = x + 1

if x > 100:

break

print sum

增加 continue 語句,只計算奇數的和

多重循環

在循環內部,還可以嵌套循環,我們來看一個例子:

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)。

代碼如下:

十位數小于個位數

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容