第5章.程序流程控制

程序流程控制(一)

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é)后有兩種:

  1. 條件循環(huán)也叫while循環(huán)

  2. 遍歷循環(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', '男')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容