Python3 條件控制
Python條件語句是通過一條或多條語句的執行結果(True或者False)來決定執行的代碼塊。
計算機之所以能做很多自動化的任務,因為它可以自己做條件判斷。
比如,輸入用戶年齡,根據年齡打印不同的內容,在Python程序中,用if
語句實現:
age = 20 if age >= 18: print('your age is', age) print('adult')
根據Python的縮進規則,如果if
語句判斷是True
,就把縮進的兩行print語句執行了,否則,什么也不做。
可以通過下圖來簡單了解條件語句的執行過程:
if 語句
Python中if語句的一般形式如下所示:
if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_block_3
- 如果 "condition_1" 為 True 將執行 "statement_block_1" 塊語句
- 如果 "condition_1" 為False,將判斷 "condition_2"
- 如果"condition_2" 為 True 將執行 "statement_block_2" 塊語句
- 如果 "condition_2" 為False,將執行"statement_block_3"塊語句
Python 中用 elif 代替了 else if,所以if語句的關鍵字為:if – elif – else。
意思是,如果if
判斷是False
,不要執行if
的內容,去把else
執行了:
age = 3 if age >= 18: print('your age is', age) print('adult') else: print('your age is', age) print('teenager')
注意:
- 1、每個條件后面要使用冒號(:),表示接下來是滿足條件后要執行的語句塊。
- 2、使用縮進來划分語句塊,相同縮進數的語句在一起組成一個語句塊。
- 3、在Python中沒有switch – case語句。
實例
以下是一個簡單的 if 實例:
#!/usr/bin/python3 var1 = 100 if var1: print ("1 - if 表達式條件為 true") print (var1) var2 = 0 if var2: print ("2 - if 表達式條件為 true") print (var2) print ("Good bye!")
執行以上代碼,輸出結果為:
1 - if 表達式條件為 true 100 Good bye!
從結果可以看到由於變量 var2 為 0,所以對應的 if 內的語句沒有執行。
elif
是else if
的縮寫,完全可以有多個elif
,所以if
語句的完整形式就是:
if <條件判斷1>: <執行1> elif <條件判斷2>: <執行2> elif <條件判斷3>: <執行3> else: <執行4>
input()
返回的數據類型是str
,str
不能直接和整數比較,必須先把str
轉換成整數。Python提供了int()
函數來完成這件事情:
s = input('birth: ') birth = int(s) if birth < 2000: print('00前') else: print('00后')
int()
函數發現一個字符串並不是合法的數字時就會報錯,程序就退出了。
以下實例演示了狗的年齡計算判斷:
#!/usr/bin/python3 age = int(input("請輸入你家狗狗的年齡: ")) print("") if age < 0: print("你是在逗我吧!") elif age == 1: print("相當於 14 歲的人。") elif age == 2: print("相當於 22 歲的人。") elif age > 2: human = 22 + (age -2)*5 print("對應人類年齡: ", human) ### 退出提示 input('點擊 enter 鍵退出')
將以上腳本保存在dog.py文件中,並執行該腳本:
$ python3 dog.py 請輸入你家狗狗的年齡: 1 相當於 14 歲的人。 點擊 enter 鍵退出
以下為if中常用的操作運算符:
操作符 | 描述 |
---|---|
< |
小於 |
<= |
小於或等於 |
> |
大於 |
>= |
大於或等於 |
== |
等於,比較對象是否相等 |
!= |
不等於 |
實例
#!/usr/bin/python3 # 程序演示了 == 操作符 # 使用數字 print(5 == 6) # 使用變量 x = 5 y = 8 print(x == y)
以上實例輸出結果:
False False
high_low.py文件演示了數字的比較運算:
#!/usr/bin/python3 # 該實例演示了數字猜謎游戲 number = 7 guess = -1 print("數字猜謎游戲!") while guess != number: guess = int(input("請輸入你猜的數字:")) if guess == number: print("恭喜,你猜對了!") elif guess < number: print("猜的數字小了...") elif guess > number: print("猜的數字大了...")
執行以上腳本,實例輸出結果如下:
$ python3 high_low.py 數字猜謎游戲! 請輸入你猜的數字:1 猜的數字小了... 請輸入你猜的數字:9 猜的數字大了... 請輸入你猜的數字:7 恭喜,你猜對了!
if 嵌套
在嵌套 if 語句中,可以把 if...elif...else 結構放在另外一個 if...elif...else 結構中。
if 表達式1: 語句 if 表達式2: 語句 elif 表達式3: 語句 else 語句 elif 表達式4: 語句 else: 語句
實例
# !/usr/bin/python3 num=int(input("輸入一個數字:")) if num%2==0: if num%3==0: print ("你輸入的數字可以整除 2 和 3") else: print ("你輸入的數字可以整除 2,但不能整除 3") else: if num%3==0: print ("你輸入的數字可以整除 3,但不能整除 2") else: print ("你輸入的數字不能整除 2 和 3")
將以上程序保存到 test_if.py 文件中,執行后輸出結果為:
$ python3 test.py 輸入一個數字:6 你輸入的數字可以整除 2 和 3
if語句小結
- if 后表達式返回值為True則執行其子代碼塊,然后此if語句到此終結,否則進入下一分支判斷,直到滿足其中一個分支,執行后終結if
- expression可以引入運算符:not,and,or,is,is not
- 多重expression為加強可讀性最好用括號包含
- if與else縮進級別一致表示是一對
- elif與else都是可選的
- 一個if判斷最多只有一個else但是可以有多個elif
- else代表if判斷的終結
- expession可以是返回值為布爾值的表達式(例x>1,x is not None)的形式,也可是單個標准對象(例 x=1;if x:print('ok'))
- 所有標准對象均可用於布爾測試,同類型的對象之間可以比較大小。每個對象天生具有布 爾 True 或 False 值。空對象、值為零的任何數字或者 Null 對象 None 的布爾值都是 False。
下列對象的布爾值是 False
Python3 循環語句
本章節將為大家介紹Python循環語句的使用。
Python中的循環語句有 for 和 while。
Python循環語句的控制結構圖如下所示:
while 循環
功能
while循環的本質就是讓計算機在滿足某一條件的前提下去重復做同一件事情(即while循環為條件循環,包含:1.條件計數循環,2條件無限循環)
這一條件指:條件表達式
同一件事指:while循環體包含的代碼塊
重復的事情例如:從1加到10000,求1-10000內所有奇數,服務等待連接
Python中while語句的一般形式:
while 判斷條件: 語句
基本循環:
while
條件:
# 循環體
# 如果條件為真,那么循環體則執行
# 如果條件為假,那么循環體不執行
同樣需要注意冒號和縮進。另外,在Python中沒有do..while循環。
以下實例使用了 while 來計算 1 到 100 的總和:
#!/usr/bin/env python3 n = 100 sum = 0 counter = 1 while counter <= n: sum = sum + counter counter += 1 print("1 到 %d 之和為: %d" % (n,sum))
執行結果如下:
1 到 100 之和為: 5050
無限循環
我們可以通過設置條件表達式永遠不為 false 來實現無限循環,實例如下:
#!/usr/bin/python3 var = 1 while var == 1 : # 表達式永遠為 true num = int(input("輸入一個數字 :")) print ("你輸入的數字是: ", num) print ("Good bye!")
執行以上腳本,輸出結果如下:
輸入一個數字 :5 你輸入的數字是: 5 輸入一個數字 :
你可以使用 CTRL+C 來退出當前的無限循環。
無限循環在服務器上客戶端的實時請求非常有用。
while 循環使用 else 語句
在 while … else 在條件語句為 false 時執行 else 的語句塊:
#!/usr/bin/python3 count = 0 while count < 5: print (count, " 小於 5") count = count + 1 else: print (count, " 大於或等於 5")
執行以上腳本,輸出結果如下:
0 小於 5 1 小於 5 2 小於 5 3 小於 5 4 小於 5 5 大於或等於 5
簡單語句組
類似if語句的語法,如果你的while循環體中只有一條語句,你可以將該語句與while寫在同一行中, 如下所示:
#!/usr/bin/python flag = 1 while (flag): print ('歡迎訪問python教程!') print ("Good bye!")
注意:以上的無限循環你可以使用 CTRL+C 來中斷循環。
while語句小結
- 條件為真就重復執行代碼,直到條件不再為真,而if是條件為真,只執行一次代碼就結束了
- while有計數循環和無限循環兩種,無限循環可以用於某一服務的主程序一直處於等待被連接的狀態
- break代表跳出本層循環,continue代表跳出本次循環
- while循環在沒有被break打斷的情況下結束,會執行else后代碼
for 語句
Python for循環可以遍歷任何序列的項目,如一個列表或者一個字符串。
功能
for 循環提供了python中最強大的循環結構(for循環是一種迭代循環機制,而while循環是條件循環,迭代即重復相同的邏輯操作,每次操作都是基於上一次的結果,而進行的)
for循環的一般格式如下:
for <variable> in <sequence>: <statements> else: <statements>
Python loop循環實例:
>>> languages = ["C", "C++", "Perl", "Python"] >>> for x in languages: ... print (x) ... C C++ Perl Python >>>
以下 for 實例中使用了 break 語句,break 語句用於跳出當前循環體:
#!/usr/bin/python3 sites = ["Baidu", "Google","Sina","Taobao"] for site in sites: if site == "Sina": print("python教程!") break print("循環數據 " + site) else: print("沒有循環數據!") print("完成循環!")
可見break
的作用是提前結束循環。
執行腳本后,在循環到 "Sina"時會跳出循環體:
循環數據 Baidu 循環數據 Google python教程! 完成循環!
range()函數
range(start,end,step=1):顧頭不顧尾
- range(10):默認step=1,start=0,生成可迭代對象,包含[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- range(1,10):指定start=1,end=10,默認step=1,生成可迭代對象,包含[1, 2, 3, 4, 5, 6, 7, 8, 9]
- range(1,10,2):指定start=1,end=10,step=2,生成可迭代對象,包含[1, 3, 5, 7, 9]
如果你需要遍歷數字序列,可以使用內置range()函數。它會生成數列,例如:
>>> for i in range(5): ... print(i) ... 0 1 2 3 4
你也可以使用range指定區間的值:
>>> for i in range(5,9) : print(i) 5 6 7 8 >>>
也可以使range以指定數字開始並指定不同的增量(甚至可以是負數,有時這也叫做'步長'):
>>> for i in range(0, 10, 3) : print(i) 0 3 6 9 >>>
注:for基於range()實現計數循環,range()生成可迭代對象,說明for循環本質還是一種迭代循環
負數:
>>> for i in range(-10, -100, -30) : print(i) -10 -40 -70 >>>
您可以結合range()和len()函數以遍歷一個序列的索引,如下所示:
>>> a = ['Google', 'Baidu', 'Sina', 'Taobao', 'QQ'] >>> for i in range(len(a)): ... print(i, a[i]) ... 0 Google 1 Baidu 2 Sina 3 Taobao 4 QQ >>>
len() 方法返回字符串長度。
返回值:字符串、列表、字典、元組等元素的長度
還可以使用range()函數來創建一個列表:
>>> list(range(5)) [0, 1, 2, 3, 4] >>>
break和continue語句及循環中的else子句
break 語句可以跳出 for 和 while 的循環體。如果你從 for 或 while 循環中終止,任何對應的循環 else 塊將不執行。 實例如下:
#!/usr/bin/python3 for letter in 'Baidu': # 第一個實例 if letter == 'i': break print ('當前字母為 :', letter) var = 10 # 第二個實例 while var > 0: print ('當期變量值為 :', var) var = var -1 if var == 5: break print ("Good bye!")
執行以上腳本輸出結果為:
當前字母為 : B 當前字母為 : a 當期變量值為 : 10 當期變量值為 : 9 當期變量值為 : 8 當期變量值為 : 7 當期變量值為 : 6 Good bye!
continue語句被用來告訴Python跳過當前循環塊中的剩余語句,然后繼續進行下一輪循環。
#!/usr/bin/python3 for letter in 'Baidu': # 第一個實例 if letter == 'u': # 字母為 o 時跳過輸出 continue print ('當前字母 :', letter) var = 10 # 第二個實例 while var > 0: var = var -1 if var == 5: # 變量為 5 時跳過輸出 continue print ('當前變量值 :', var) print ("Good bye!")
可見continue
的作用是提前結束本輪循環,並直接開始下一輪循環。
執行以上腳本輸出結果為:
當前字母 : B 當前字母 : a 當前字母 : d 當前字母 : u 當前變量值 : 9 當前變量值 : 8 當前變量值 : 7 當前變量值 : 6 當前變量值 : 4 當前變量值 : 3 當前變量值 : 2 當前變量值 : 1 當前變量值 : 0 Good bye!
循環語句可以有 else 子句,它在窮盡列表(以for循環)或條件變為 false (以while循環)導致循環終止時被執行,但循環被break終止時不執行。
如下實例用於查詢質數的循環例子:
#!/usr/bin/python3 for n in range(2, 10): for x in range(2, n): if n % x == 0: print(n, '等於', x, '*', n//x) break else: # 循環中沒有找到元素 print(n, ' 是質數')
執行以上腳本輸出結果為:
2 是質數 3 是質數 4 等於 2 * 2 5 是質數 6 等於 2 * 3 7 是質數 8 等於 2 * 4 9 等於 3 * 3
for語句小結
- for循環為迭代循環
- 可遍歷序列成員(字符串,列表,元組)
- 可遍歷任何可迭代對象(字典,文件等)
- 可以用在列表解析和生成器表達式中
- break,continue,else在for中用法與while中一致
小結
循環是讓計算機做重復任務的有效的方法。
break
語句可以在循環過程中直接退出循環,而continue
語句可以提前結束本輪循環,並直接開始下一輪循環。這兩個語句通常都必須配合if
語句使用。
要特別注意,不要濫用break
和continue
語句。break
和continue
會造成代碼執行邏輯分叉過多,容易出錯。大多數循環並不需要用到break
和continue
語句,上面的兩個例子,都可以通過改寫循環條件或者修改循環邏輯,去掉break
和continue
語句。
有些時候,如果代碼寫得有問題,會讓程序陷入“死循環”,也就是永遠循環下去。這時可以用Ctrl+C
退出程序,或者強制結束Python進程。
pass 語句
Python pass是空語句,是為了保持程序結構的完整性。
pass 不做任何事情,一般用做占位語句,如下實例
>>> while True: ... pass # 等待鍵盤中斷 (Ctrl+C)
以下實例在字母為 o 時 執行 pass 語句塊:
#!/usr/bin/python3 for letter in 'Baidu': if letter == 'i': pass print ('執行 pass 塊') print ('當前字母 :', letter) print ("Good bye!")
執行以上腳本輸出結果為:
當前字母 : B
當前字母 : a
執行 pass 塊
當前字母 : i
當前字母 : d
當前字母 : u
Good bye!