程序流程控制(一)
python是通過一些程序結(jié)構(gòu)來控制程序的執(zhí)行順序和流程的。
一、程序結(jié)構(gòu)
計算機程序是一條條按順序執(zhí)行的指令。順序結(jié)構(gòu)是計算機程序的基礎,但單一的程序結(jié)構(gòu)不能解決所有問題。計算機程序由三種基本結(jié)構(gòu)組成:
順序結(jié)構(gòu)
分支結(jié)構(gòu)
-
循環(huán)結(jié)構(gòu)
1.順序結(jié)構(gòu)
順序結(jié)構(gòu)是程序執(zhí)行的基本流程,它會按照代碼從上往下的順序依次執(zhí)行
a = 1
a += 1
print(a)
2
從上往下依次執(zhí)行
分支結(jié)構(gòu)
分支結(jié)構(gòu)是程序根據(jù)條件判斷結(jié)構(gòu)而選擇不同代碼向前執(zhí)行的一種方式,也叫條件分支。
分支結(jié)構(gòu)包括: 1、 單分支 2、 二分支 3、 多分支
2.1 單分支
在python中單分支結(jié)構(gòu)通過if語句來實現(xiàn),語法如下:
if <條件>:
語句塊
- 注意條件語句結(jié)束后要緊跟冒號
- 語句塊是if條件滿足后執(zhí)行的一條或多條語句序列
- 語句塊中語句通過縮進與if語句所在行形成包含關系
- 縮進安裝規(guī)范為4個空格 if語句會首先計算<條件>表達式,如果結(jié)構(gòu)為True則會執(zhí)行包含的語句塊,結(jié)果為False則會跳過所包含的語句塊。
if語句中的語句塊是執(zhí)行與否依賴于條件判斷。但無論什么情況,控制都會轉(zhuǎn)到與if語句同級別的下一條語句。
案例:成績是否及格
60分及以上為及格,及格獎勵一個么么噠 60分一下為不及格,不接個賞一個大耳吧
input函數(shù)
input函數(shù)用來接收用戶輸入的文本信息,然后以字符串的形式返回,它接收字符串參數(shù)作為提示信息輸出。
score = input('請輸入你的成績:') # 接受用戶輸入的成績
score = float(score) # input函數(shù)返回的是字符串str,所以要轉(zhuǎn)換成浮點數(shù)
if score < 60: # 判斷成績是否及格
print('賞一個大耳吧')
請輸入你的成績: 50
賞一個大耳吧
score = input('請輸入你的成績:') # 接受用戶輸入的成績
score = float(score)
if score >= 60: # 判斷成績是否及格
print('獎勵一個么么噠')
請輸入你的成績: 80
獎勵一個么么噠
2.2 二分支
python中二分支結(jié)構(gòu)通過if-else語句來實現(xiàn)的,語法格式如下
if <條件>:
<語句塊1>
else:
<語句塊2>
- 語句塊1-是在if條件滿足后執(zhí)行的一個或多個語句序列
- 語句塊2-是在if條件不滿足后執(zhí)行的語句序列
- 注意縮進,<語句2>通過縮進與else所在行形成包含關系 二分支語句用于區(qū)分<條件>的兩種可能True或者False,分別執(zhí)行路徑
案例:成績是否及格(2) 通過二分支改進案例成績是否及格
score = input('請輸入你的成績:')
score = float(score)
if score < 60: # 判斷成績是否不及格,不及格返回語句塊1
print('賞一個大耳吧')
else: # 語句塊1判斷及格,直接返回else后的語句塊。
print('獎勵一個么么噠')
請輸入你的成績: 80
獎勵一個么么噠
三目運算 二分支結(jié)構(gòu)還是一種更簡潔的表達方式,語法格式如下:
<表達式> if <條件> else <表達式2>
下面的代碼可以改寫為:
score = input('請輸入你的成績:')
score = float(score)
print('賞一個大耳吧') if score < 60 else print('獎勵一個么么噠')
請輸入你的成績: 50
賞一個大耳吧
2.3 多分支
python通過if=elif-else 表示多分支結(jié)構(gòu),語法如下:
if <條件1>:
<代碼塊1>
elif<條件2>:
<代碼塊2>
...
else:
<代碼塊3>
多分支是二分支的擴展,用于多個判斷條件多條執(zhí)行路徑的情況。python依次執(zhí)行判斷條件,尋找第一個結(jié)果為True的條件,執(zhí)行該條件下的代碼塊,同時結(jié)束后跳過整個if-elif-else結(jié)構(gòu),執(zhí)行后面的語句。如果沒有任何條件成立,這執(zhí)行else下的代碼塊,二else語句是可選的,也即是說可以沒有else語句。
案例:成績評價 請根據(jù)用戶輸入的成績,按一下等級分區(qū):
- <40:E
- 40-59:D
- 60-74:C
- 75-84:B
- 85-100:A
score = input('請輸入你的成績:')
score = float(score)
if score < 40:
print('成績評價為:E')
elif score < 60 and score >= 40:
print('成績評價為:D')
elif 60 <= score < 75:
print('成績評價為:C')
elif 75 <= score < 85:
print('成績評價為:B')
else:
print('成績評價為:A')
請輸入你的成績: 80
成績評價為:B
score = input('請輸入你的成績:') # 另外一種寫法
res = ''
score = float(score)
if score < 40:
res = 'E'
elif score < 60 and score >= 40:
res = 'D'
elif 60 <= score < 75:
res = 'C'
elif 75 <= score < 85:
res = 'B'
else:
res = 'A'
print('成績評價為:{}'.format(res))
請輸入你的成績: 60
成績評價為:C
if score >= 60:
if score < 70:
if score < 90:
pass
# 嵌套案例,一般嵌套不能超過三層,影響代碼美觀也不好進行差錯
3. 循環(huán)結(jié)構(gòu)
python中循環(huán)節(jié)后有兩種:
條件循環(huán)也叫while循環(huán)
-
遍歷循環(huán)也叫for循環(huán)
3.1 條件循環(huán)
python中的條件循環(huán)通過while循環(huán)語句來實現(xiàn),所以也叫while循環(huán),
語法格式如下: ``` while<條件>: 代碼塊
```
while關鍵字空格后條件表達式末尾加上冒號組成while語句
-
代碼塊中的代碼通過4個空格和while語句形成包含關系
while語句首先計算<條件>表達式,如果結(jié)構(gòu)True,則執(zhí)行對對應代碼塊中的語句,執(zhí)行結(jié)束后再次指定<條件>
表達式,再次判斷結(jié)果,如果未True則循環(huán)執(zhí)行,知道<條件>表達式為False時跳出循環(huán),執(zhí)行和while語句相同縮進的下一條語句。
當<條件>表達式恒為True時,形成無限循環(huán),也叫死循環(huán),需要小心使用
# 依次打印0-5
i = 0
while i < 6: # 判斷i小于10,執(zhí)行下方代碼塊。直至i不小于10跳出。
print(i)
i = i + 1 # 需要將條件放打印下方,不然不會打印0
0
1
2
3
4
5
# 序列的循環(huán)
# 列表的元素循環(huán)
ls = ['s','f','y','u']
i = 0
# len計算列表ls長度,然后判斷i是否小于計算的長度,小于執(zhí)行代碼塊,不下于跳出
while i < len(ls):
print(ls[i]) # 打印列表ls中循環(huán)的i數(shù)值的索引
i = i + 1
s
f
y
u
# 元祖的循環(huán)
ls = ('s',1,[1,2])
i = 0
while i < len(ls):
print(ls[i])
i = i + 1
s
1
[1, 2]
# 集合的循環(huán)
# 集合沒有順序,沒有索引,需要先轉(zhuǎn)換成列表,然后才能循環(huán)
ls = {'s',1,(2,)}
ls = list(ls)
i = 0
while i < len(ls):
print(ls[i])
i = i + 1
1
s
(2,)
# 字典也不可以直接通過這種方法循環(huán)
# 因為字典沒有整數(shù)索引
# 可以先獲取字典的keys,轉(zhuǎn)化為列表,然后在迭代循環(huán)
ls = {'name': 'xiaolan',
'age': 18,
'sex': '男'
}
keys = list(ls.keys()) # ls.keys()函數(shù)提取出字典的key,然后在轉(zhuǎn)化成list
i = 0
while i < len(keys):
print(keys[i],ls[keys[i]]) # 打印列表的key,然后在根據(jù)key獲取ls字典的值。
i = i + 1
name xiaolan
age 18
sex 男
3.2 遍歷循環(huán)
python 中使用關鍵字for來實現(xiàn)遍歷循環(huán),也叫for循環(huán),也叫迭代循環(huán)
語法如下:
for <循環(huán)變量> in <遍歷結(jié)構(gòu)>:
代碼塊
- 關鍵字for + 空格 + <循環(huán)變量> + 關鍵字in + <遍歷結(jié)構(gòu)> + 冒號組成for語句
- 代碼塊通過縮進和for語句形成包含關系 for循環(huán)會依次取出遍歷結(jié)構(gòu)中的元素,然后賦值給循環(huán)變量,每次遍歷都會執(zhí)行代碼塊,直到取出遍歷結(jié)構(gòu)中的所有元素。
所有可迭代對象都可以作為遍歷結(jié)構(gòu)進行for循環(huán)。
基本數(shù)據(jù)類型中序列數(shù)據(jù)類型,散列數(shù)據(jù)類型都可以進行迭代。 數(shù)值類型(整數(shù),浮點數(shù),復數(shù))不可進行迭代。
# for循環(huán)來遍歷可迭代對象非常方便
# 對于序列來說,迭代按照順序進行
# 列表
ls = list('assd')
for i in ls: # i可以為任意變量
print(i)
a
s
s
d
#字符串
ls = 'assd'
for i in ls:
print(i)
a
s
s
d
# 元組
t = (1,2,'a')
for a in t:
print(a)
1
2
a
# 集合
# 對于集合來說,迭代是沒有順序的
j = {1,5,'s'}
for a in j:
print(a)
1
s
5
# 字典
# dict.values()函數(shù),返貨字典的值
ls = {'name': 'xiaolan',
'age': 18,
'sex': '男'
}
for a in ls:
print(a)
name
age
sex
# dict.values()函數(shù),返回字典的值
for a in ls.values():
print(a)
xiaolan
18
男
# dict.itmes()函數(shù),返回字典的鍵值對
# 如果想同時迭代出鍵和值
for a in ls.items():
print(a)
('name', 'xiaolan')
('age', 18)
('sex', '男')