4.Python——迴圈結構

gctdut7d發表於2020-10-07

[1]. 迴圈結果

流程控制即控制流程,具體指控制程式的執行流程,而程式的執行流程分為三種結構:順序結構(之前我們寫的程式碼都是順序結構)、分支結構(用到if判斷)、迴圈結構(用到while與for)

[2]. 分支結構

2.1 什麼是分支結構

分支結構就是根據條件判斷的真假去執行不同分支對應的子程式碼

2.2 為什麼要用分支結構

人類某些時候需要根據條件來決定做什麼事情,比如:如果今天下雨,就帶傘

所以程式中必須有相應的機制來控制計算機具備人的這種判斷能力

2.3 如何使用分支結構

2.3.1 if語法

用if關鍵字來實現分支結構,完整語法如下

if 條件1:   # 如果條件1的結果為True,就依次執行:程式碼1、程式碼2,......
   程式碼1
    程式碼2
    ......
elif 條件2: # 如果條件2的結果為True,就依次執行:程式碼3、程式碼4,......
   程式碼3
    程式碼4
    ......
elif 條件3: # 如果條件3的結果為True,就依次執行:程式碼5、程式碼6,......
   程式碼5
    程式碼6
    ......
else:     # 其它情況,就依次執行:程式碼7、程式碼8,......
    程式碼7
    程式碼8
    ......
# 注意:
# 1、python用相同縮排(4個空格表示一個縮排)來標識一組程式碼塊,同一組程式碼會自上而下依次執行
# 2、條件可以是任意表示式,但執行結果必須為布林型別
     # 在if判斷中所有的資料型別也都會自動轉換成布林型別
       # 2.1、None,0,空(空字串,空列表,空字典等)三種情況下轉換成的布林值為False
       # 2.2、其餘均為True

2.3.2 if應用案例

案例1

如果:女人的年齡>30歲,那麼:叫阿姨

age_of_girl=31
if age_of_girl > 30:
    print('阿姨好')

案例2:

如果:女人的年齡>30歲,那麼:叫阿姨,否則:叫小姐

age_of_girl=18
if age_of_girl > 30:
    print('阿姨好')
else:
    print('小姐好')

案例3:

如果:女人的年齡>=18並且<22歲並且身高>170並且體重<100並且是漂亮的,那麼:表白,否則:叫阿姨**

age_of_girl=18
height=171
weight=99
is_pretty=True
if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:
    print('表白...')
else:
    print('阿姨好')

案例4:

如果:成績>=90,那麼:優秀

如果成績>=80且<90,那麼:良好

如果成績>=70且<80,那麼:普通

其他情況:很差

score=input('>>: ')
score=int(score)

if score >= 90:
    print('優秀')
elif score >= 80:
    print('良好')
elif score >= 70:
    print('普通')
else:
    print('很差')

案例5:if巢狀

#在表白的基礎上繼續:
#如果表白成功,那麼:在一起
#否則:列印。。。

age_of_girl=18
height=171
weight=99
is_pretty=True
success=False

if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:
    if success:
        print('表白成功,在一起')
    else:
        print('什麼愛情不愛情的,愛nmlgb的愛情,愛nmlg啊...')
else:
    print('阿姨好')

練習1: 登陸功能

name=input('請輸入使用者名稱字:').strip()
password=input('請輸入密碼:').strip()
if name == 'tony' and password == '123':
    print('tony login success')
else:
    print('使用者名稱或密碼錯誤')

練習2:

#!/usr/bin/env python
#根據使用者輸入內容列印其許可權

'''
egon --> 超級管理員
tom  --> 普通管理員
jack,rain --> 業務主管
其他 --> 普通使用者
'''
name=input('請輸入使用者名稱字:')

if name == 'egon':
    print('超級管理員')
elif name == 'tom':
    print('普通管理員')
elif name == 'jack' or name == 'rain':
    print('業務主管')
else:
    print('普通使用者')

[3].迴圈結構

3.1 什麼是迴圈結構

迴圈結構就是重複執行某段程式碼塊

3.2 為什麼要用迴圈結構

img

人類某些時候需要重複做某件事情

所以程式中必須有相應的機制來控制計算機具備人的這種迴圈做事的能力

3.3 如何使用迴圈結構

3.3.1 while迴圈語法

python中有while與for兩種迴圈機制,其中while迴圈稱之為條件迴圈,語法如下

while 條件:
     程式碼1     
     程式碼2     
     程式碼3
while的執行步驟:
步驟1:如果條件為真,那麼依次執行:程式碼1、程式碼2、程式碼3......
步驟2:執行完畢後再次判斷條件,如果條件為True則再次執行:程式碼1、程式碼2、程式碼3......,如果條件為False,則迴圈終止

img

3.3.2 while迴圈應用案例

案例一:while迴圈的基本使用

使用者認證程式

#使用者認證程式的基本邏輯就是接收使用者輸入的使用者名稱密碼然後與程式中存放的使用者名稱密碼進行判斷,判斷成功則登陸成功,判斷失敗則輸出賬號或密碼錯誤

inp_name =  input("請輸入使用者名稱:")
inp_pwd =  input("請輸入密碼:")
if inp_name == username and inp_pwd == password:
    print("登陸成功")
else:
    print("輸入的使用者名稱或密碼錯誤!")

#即使是小白的你,也覺得的太low了是不是,以後要修改功能還得修改3次,因此記住,寫重複的程式碼是程式設計師最不恥的行為。
#那麼如何做到不用寫重複程式碼又能讓程式重複一段程式碼多次呢? 迴圈語句就派上用場啦(使用while迴圈實現)

username = "jason"
password = "123"
# 記錄錯誤驗證的次數
count = 0
while count < 3:
    inp_name = input("請輸入使用者名稱:")
    inp_pwd = input("請輸入密碼:")
    if inp_name == username and inp_pwd == password:
        print("登陸成功")
    else:
        print("輸入的使用者名稱或密碼錯誤!")
        count += 1

案例二:while+break的使用

使用了while迴圈後,程式碼確實精簡多了,但問題是使用者輸入正確的使用者名稱密碼以後無法結束迴圈,那如何結束掉一個迴圈呢?這就需要用到break了!

username = "jason"
password = "123"
# 記錄錯誤驗證的次數
count = 0
while count < 3:
    inp_name = input("請輸入使用者名稱:")
    inp_pwd = input("請輸入密碼:")
    if inp_name == username and inp_pwd == password:
        print("登陸成功")
        break # 用於結束本層迴圈
    else:
        print("輸入的使用者名稱或密碼錯誤!")
        count += 1

案例三:while迴圈巢狀+break

如果while迴圈巢狀了很多層,要想退出每一層迴圈則需要在每一層迴圈都有一個break

username = "jason"
password = "123"
count = 0
while count < 3:  # 第一層迴圈
    inp_name = input("請輸入使用者名稱:")
    inp_pwd = input("請輸入密碼:")
    if inp_name == username and inp_pwd == password:
        print("登陸成功")
        while True:  # 第二層迴圈
            cmd = input('>>: ')
            if cmd == 'quit':
                break  # 用於結束本層迴圈,即第二層迴圈
            print('run <%s>' % cmd)
        break  # 用於結束本層迴圈,即第一層迴圈
    else:
        print("輸入的使用者名稱或密碼錯誤!")
        count += 1

案例四:while迴圈巢狀+tag的使用

針對巢狀多層的while迴圈,如果我們的目的很明確就是要在某一層直接退出所有層的迴圈,其實有一個竅門,就讓所有while迴圈的條件都用同一個變數,該變數的初始值為True,一旦在某一層將該變數的值改成False,則所有層的迴圈都結束

username = "jason"
password = "123"
count = 0

tag = True
while tag: 
    inp_name = input("請輸入使用者名稱:")
    inp_pwd = input("請輸入密碼:")
    if inp_name == username and inp_pwd == password:
        print("登陸成功")
        while tag:  
            cmd = input('>>: ')
            if cmd == 'quit':
                tag = False  # tag變為False, 所有while迴圈的條件都變為False 
                break
            print('run <%s>' % cmd)
        break  # 用於結束本層迴圈,即第一層迴圈
    else:
        print("輸入的使用者名稱或密碼錯誤!")
        count += 1

案例五:while+continue的使用

break代表結束本層迴圈,而continue則用於結束本次迴圈,直接進入下一次迴圈

# 列印1到10之間,除7以外的所有數字
number=11
while number>1:
    number -= 1
    if number==7:
        continue # 結束掉本次迴圈,即本次迴圈continue之後的程式碼都不會執行了,而是直接進入下一次迴圈
    print(number)

案例五:while+else的使用

在while迴圈的後面,我們可以跟else語句,當while 迴圈正常執行完並且中間沒有被break 中止的話,就會執行else後面的語句,所以我們可以用else來驗證,迴圈是否正常結束

count = 0
while count <= 5 :
    count += 1
    print("Loop",count)
else:
    print("迴圈正常執行完啦")
print("-----out of while loop ------")
輸出
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
迴圈正常執行完啦   #沒有被break打斷,所以執行了該行程式碼
-----out of while loop ------

如果執行過程中被break,就不會執行else的語句

count = 0
while count <= 5 :
    count += 1
    if count == 3:
        break
    print("Loop",count)
else:
    print("迴圈正常執行完啦")
print("-----out of while loop ------")
輸出
Loop 1
Loop 2
-----out of while loop ------ #由於迴圈被break打斷了,所以不執行else後的輸出語句

3.3.3 for迴圈語法

迴圈結構的第二種實現方式是for迴圈,for迴圈可以做的事情while迴圈都可以實現,之所以用for迴圈是因為在迴圈取值(即遍歷值)時for迴圈比while迴圈的使用更為簡潔,

for迴圈語法如下

for 變數名 in 可迭代物件: # 此時只需知道可迭代物件可以是字串\列表\字典,我們之後會專門講解可迭代物件
    程式碼一
    程式碼二
    ...

#例1
for item in ['a','b','c']:
    print(item)
# 執行結果
a
b
c

# 參照例1來介紹for迴圈的執行步驟
# 步驟1:從列表['a','b','c']中讀出第一個值賦值給item(item=‘a’),然後執行迴圈體程式碼
# 步驟2:從列表['a','b','c']中讀出第二個值賦值給item(item=‘b’),然後執行迴圈體程式碼
# 步驟3: 重複以上過程直到列表中的值讀盡

img

3.3.4 for迴圈應用案例

案例一:列印數字0-5

# 簡單版:for迴圈的實現方式
for count in range(6):  # range(6)會產生從0-5這6個數
    print(count)

# 複雜版:while迴圈的實現方式
count = 0
while count < 6:
    print(count)
    count += 1

案例二:遍歷字典

# 簡單版:for迴圈的實現方式
for k in {'name':'jason','age':18,'gender':'male'}:  # for 迴圈預設取的是字典的key賦值給變數名k
    print(k)

# 複雜版:while迴圈確實可以遍歷字典,後續將會迭代器部分詳細介紹

案例三:for迴圈巢狀

#請用for迴圈巢狀的方式列印如下圖形:
*****
*****
*****

for i in range(3):
    for j in range(5):
        print("*",end='')
    print()  # print()表示換行

注意:break 與 continue也可以用於for迴圈,使用語法同while迴圈

練習一:

列印九九乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print('%s*%s=%s' %(i,j,i*j),end=' ')
    print()
# 分析
'''
#max_level=5
     *        # current_level=1,空格數=4,*號數=1
    ***       # current_level=2,空格數=3,*號數=3
   *****      # current_level=3,空格數=2,*號數=5
  *******     # current_level=4,空格數=1,*號數=7
 *********    # current_level=5,空格數=0,*號數=9

# 數學表示式
空格數=max_level-current_level
*號數=2*current_level-1
'''

# 實現:
max_level=5
for current_level in range(1,max_level+1):
    for i in range(max_level-current_level):
        print(' ',end='') #在一行中連續列印多個空格
    for j in range(2*current_level-1):
        print('*',end='') #在一行中連續列印多個空格
    print()

相關文章