Python使用`if`語句提供分支支持,提供了`while`、`for-in`迴圈,也提供了`break`和`continue`控製程序的迴圈結構。 ...
blog:https://www.cnblogs.com/Rohn
Tips:本文中代碼均使用
3.8.x
版本的Python。部分文字和圖片源自網路,侵刪。
目錄
關於流程式控制制
Python 同樣提供了現代編程語言都支持的兩種基本流程式控制制結構,分支結構和迴圈結構:
- 分支結構用於實現根據條件來選擇性地執行某段代碼;
- 迴圈結構用於實現根據迴圈條件重覆執行某段代碼;
Python使用if
語句提供分支支持,提供了while
、for-in
迴圈,也提供了break
和continue
控製程序的迴圈結構。
在學習流程式控制制前,需要瞭解布爾、比較操作符等知識。
布爾值
雖然整型、浮點型和字元串數據類型有無數種可能的值,但“布爾”數據類型只有兩種值:True
和False
。Boolean(布爾)的首字母大寫, 因為這個數據類型是根據數學家George Boole命名的。在作為Python代碼輸入時,布爾值True
和False
不像字元串,兩邊沒有引號,它們總是以大寫字母T或F開頭, 後面的字母小寫。
例如:
>>> 2==2
True
>>> a=true
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'true' is not defined
>>> a=True
>>> a
True
比較操作符
比較操作符比較兩個值,求值為一個布爾值。
以下是操作符及其含義,這些操作符根據給它們提供的值,求值為True
或False
。
操作符 | 含義 |
---|---|
== | 等於 |
!= | 不等於 |
< | 小於 |
> | 大於 |
<= | 小於等於 |
>= | 大於等於 |
Tips:整型或浮點型的值永遠不會與字元串相等。
<
、>
、<=
和>=
操作符僅用於整型和浮點型值。
例如:
>>> 33 == 33
True
>>> 33 != 33
False
>>> 33 != 34
True
>>> 33 < 34
True
>>> 33 > 34
False
>>> 33 > 32
True
布爾操作符
3 個布爾操作符(and
、or
和not
)用於比較布爾值。
二元布爾操作符
and
和or
操作符總是接受兩個布爾值(或表達式),所以它們被認為是二元操作符。如果兩個布爾值都為True
,and
操作符就將表達式求值為True
,否則求值
為False
。
操作符and
的真值表
表達式 | 求值為 |
---|---|
True and True | True |
True and False | False |
False and True | False |
False and False | False |
or
操作符的真值表
表達式 | 求值為 |
---|---|
True or True | True |
True or False | True |
False or True | True |
False or False | False |
not操作符
not
操作符只作用於一個布爾值(或表達式)。not
操作符求值為相反的布爾值。
not
操作符的真值表
表達式 | 求值為 |
---|---|
not True | False |
not False | True |
混合布爾和比較操作符
既然比較操作符求值為布爾值,就可以和布爾操作符一起,在表達式中使用。
例如:
>>> (2 < 3) and (22 > 1)
True
>>> (2 > 3) and (22 > 1)
False
>>> (1 == 2) or (3 == 3)
True
Tips:和算術操作符一樣,布爾操作符也有操作順序。在所有算術和比較操作符求值後,Python先求值
not
操作符,然後是and
操作符,然後是or
操作符。
控制流的元素
控制流語句的開始部分通常是條件,接下來是一個代碼塊,稱為子句。
條件
你前面看到的布爾表達式可以看成是條件,它和表達式是一回事。條件只是在控制流語句的上下文中更具體的名稱。條件總是求值為一個布爾值,True
或False
。控制流語句根據條件是 True 還是 False,來決定做什麼。 幾乎所有的控制流語句都使用條件。
代碼塊
一些代碼行可以作為一組, 放在代碼塊 中。 可以根據代碼行的縮進,知道代碼塊的開始和結束。代碼塊有 3 條規則:
- 縮進增加時, 代碼塊開始;
- 代碼塊可以包含其他代碼塊;
- 縮進減少為零,或減少為外麵包圍代碼塊的縮進,代碼塊就結束了;
if語句
選擇(條件)語句可細分為3種形式,分別是if
語句、if-else
語句和if-elif-else
語句。
if語句
if 條件表達式:
代碼塊
if-else語句
if 表達式:
代碼塊 1
else:
代碼塊 2
if-elif-else語句
if 表達式 1:
代碼塊 1
elif 表達式 2:
代碼塊 2
elif 表達式 3:
代碼塊 3
...
else:
代碼塊 n
練習
英制單位英寸與公制單位釐米互換
value = float(input('請輸入長度: '))
unit = input('請輸入單位: ')
if unit == 'in' or unit == '英寸':
print('%f英寸 = %f釐米' % (value, value * 2.54))
elif unit == 'cm' or unit == '釐米':
print('%f釐米 = %f英寸' % (value, value / 2.54))
else:
print('請輸入有效的單位')
百分製成績轉換為等級製成績。
要求:如果輸入的成績在90分以上(含90分)輸出A;80分-90分(不含90分)輸出B;70分-80分(不含80分)輸出C;60分-70分(不含70分)輸出D;60分以下輸出E。
score = float(input('請輸入成績: '))
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'E'
print('對應的等級是:', grade)
while語句
利用while
語句,可以讓一個代碼塊一遍又一遍的執行。只要while
語句的條件為True
,while
子句中的代碼就會執行。在代碼中,while
語句總是包含下麵幾部分:
- 關鍵字;
- 條件(求值為
True
或False
的表達式); - 冒號;
- 從新行開始,縮進的代碼塊(稱為
while
子句)。
語法格式
語法格式如下:
while 條件表達式:
代碼塊
在while
迴圈中,條件總是在每次迭代開始時檢查(也就是每次迴圈執行時)。如果條件為True
, 子句就會執行,然後,再次檢查條件。當條件第一次為False
時,while
子句就跳過。
例如:
spam = 0
while spam < 5:
print('hello world')
spam += 1
練習
猜數字游戲
import random
answer = random.randint(1, 100)
counter = 0
while True:
counter += 1
number = int(input('請輸入: '))
if number < answer:
print('大一點')
elif number > answer:
print('小一點')
else:
print('恭喜你猜對了!')
break
print('你總共猜了%d次' % counter)
if counter > 7:
print('你的智商餘額明顯不足')
for語句
在條件為True
時,while
迴圈就會繼續迴圈(這是它的名稱的由來)。但如果你想讓一個代碼塊執行固定次數,該怎麼辦?可以通過for
迴圈語句和range()
函數來實現。
常用於遍歷字元串、列表、元組、字典、集合等序列類型,逐個獲取序列中的各個元素。
語法格式
語法格式如下:
for 迭代變數 in 字元串|列表|元組|字典|集合:
代碼塊
在使用for
迴圈時,最基本的應用就是進行數值迴圈。比如說,想要實現從1到100的累加,可以執行如下代碼:
print("計算 1+2+...+100 的結果為:")
# 保存累加結果的變數
result = 0
# 逐個獲取從 1 到 100 這些值,並做累加操作
for i in range(101):
result += i
print(result)
運行結果如下:
計算 1+2+...+100 的結果為:
5050
Tips:
range(101)
可以用來產生0到100範圍的整數,需要註意的是取不到101。
練習
1~100之間的偶數求和
sum = 0
for x in range(2, 101, 2):
sum += x
print(sum) # Returns '2550'
輸入一個正整數判斷它是不是素數
from math import sqrt
num = int(input('請輸入一個正整數: '))
end = int(sqrt(num))
is_prime = True
for x in range(2, end + 1):
if num % x == 0:
is_prime = False
break
if is_prime and num != 1:
print('%d是素數' % num)
else:
print('%d不是素數' % num)
break語句
有一個捷徑,讓執行提前跳出while
迴圈子句。如果執行遇到break
語句,就會馬上退出while
迴圈子句。在代碼中,break
語句僅包含break
關鍵字。
break
用於完全結束一個迴圈,跳出迴圈體。不管是哪種迴圈,一旦在迴圈體中遇到break
,系統就將完全結束該迴圈,開始執行迴圈之後的代碼。
例如:
for i in range(0, 10) :
print("i的值是: ", i)
if i == 2 :
# 執行該語句時將結束迴圈
break
運行的結果為:
i的值是: 0
i的值是: 1
i的值是: 2
continue語句
和break
語句相比,continue
語句的作用則沒有那麼強大,它只能終止本次迴圈而繼續執行下一次迴圈。
例如:
for i in range(0, 3 ) :
print("i的值是: ", i)
if i == 1 :
# 忽略本次迴圈的剩下語句
continue
print("continue後的輸出語句")
運行結果如下:
i的值是: 0
continue後的輸出語句
i的值是: 1
i的值是: 2
continue後的輸出語句