流程控制之if 判斷,流程控制之while迴圈,流程控制之for 迴圈
阿新 • • 發佈:2022-01-12
流程控制
流程控制即控制流程,具體指控制程式的執行流程,而程式的執行流程分為三種結構:
-
順序結構:自上而下依次執行(之前我們寫的程式碼都是順序結構)
-
分支結構:在執行過程中根據條件的不同可能會執行不同的流程(用到if判斷)
-
迴圈結構:在執行過程中有些程式碼需要反覆執行(用到while與for)
分支結構:if判斷
必知必會:
- 1、條件都會轉成布林值,從而決定程式碼是否執行
- 2、在python中使用縮排來表示程式碼的從屬關係
- 3、並不是所有程式碼都可以擁有子程式碼
- 4、同屬於你某個程式碼的多行子程式碼必須要保持相同的縮排量
- 5、在python中推薦使用相同縮排(四個空格表示一個縮排)來標識一組程式碼塊(上一行程式碼結尾如果是冒號,那麼下一行程式碼必須縮排)
什麼是分支結構
分支結構就是根據條件判斷的真假去執行不同分支對應的子程式碼
為何要用分支結構
為了讓計算機像人一樣根據條件的判斷結果去做不同的事情
用if關鍵字來實現分支結構
if 條件1: ... 條件1成立後執行的子程式碼塊 elif 條件2: ... 條件1不成立,條件2成立後執行的子程式碼塊 else: ... 上述條件都不滿足就走這段
注意:
-
條件可以是任意表達式,但執行結果必須為布林型別 在if判斷中所有的資料型別也都會自動轉換成布林型別
- None,0,空(空字串,空列表,空字典等)三種情況下轉換成的布林值為False
- 其餘均為True
單if分支結構
if 條件: ... 條件成立後執行的子程式碼塊 print("end...") # 案例:年齡小於22,叫小夥子 age = 20 if age < 22: print("毛兒都沒長齊的傢伙")
if..else連用(雙分支)
if 條件: ... 條件成立後執行的子程式碼塊 else: ... if條件不成立就走這段 # 案例:猜年齡 age = 22 if age < 20: print("小夥子好") else: print("傻不拉幾的")
if...elif...else連用(多分支)
if 條件1: ... 條件1成立後執行的子程式碼塊 elif 條件2: ... 條件1不成立,條件2成立後執行的子程式碼塊 elif 條件3: ... 條件1和2都不成立,條件3成立後執行的子程式碼塊 else: ... 上述所有條件都不成立就走這段 # 案例: # 如果成績 >= 90:優秀 # 如果成績 >= 80且< 90:良好 # 如果成績 >= 70且< 80:普通 # 其他情況:很差 score = 83 if score >= 90: print("優秀") elif score >= 80: print("良好") elif score >= 70: print("普通") else: print("很差")
if判斷之巢狀
# 一定要圖文相結合去消化理解吸收 # 案例:在相親的基礎上繼續,如果牽手成功,那麼:在一起,否則。。。 age = 26 height = 165 weight = 99 is_success = True if age < 28 and height > 160 and weight < 100: print('小姐姐能否牽手') # 判斷小姐姐是否會牽手 if is_success: print('吃飯 看電影 天黑了...') else: print('去你妹的 變態!') else: print('可惜了')
迴圈結構:while迴圈
-
什麼是while迴圈
- 迴圈就是重複做某件事,while迴圈是Python提供第一種迴圈機制稱之為:條件迴圈
-
為何要有while迴圈
- 為了控制計算機能夠像人一樣去重複做某件事
while迴圈基本語法
while 條件: ... 條件成立之後迴圈執行的子程式碼塊 """ while的執行步驟: 1、如果條件為真,那麼依次執行子程式碼塊 2、執行完畢後再次判斷條件,如果條件為True則再次執行子程式碼塊如果條件為False,則迴圈終止 """ while True: # 1.獲取使用者輸入的使用者名稱和密碼 username = input('請輸入使用者名稱>>>:') password = input('請輸入密碼>>>:') # 2.判斷使用者名稱和密碼是否正確 if username == 'jack' and password == '123': print('登入成功!') else: print('登入失敗,請重新輸入!') # 注意:死迴圈---》條件永遠為True
結束while迴圈的兩種方式
方式一:全域性標誌位
- 特點:等到本次迴圈體程式碼執行完畢後,下一次迴圈判斷條件時才會生效
# 標誌位的使用 count = 0 flag = True while tag: if count == 5: flag = False # 把條件改為False print(i) count += 1
方式二:break
- 特點:break立即結束本層while迴圈
count = 0 tag = True while tag: if count == 5: # tag = False break print(i) count += 1
while巢狀
while迴圈巢狀+全域性標誌位的使用
- 針對巢狀多層的while迴圈,如果我們的目的很明確就是要在某一層直接退出所有層的迴圈,其實有一個竅門,“全域性標誌位”就讓所有while迴圈的條件都用同一個變數,該變數的初始值為True,一旦在某一層將該變數的值改成False,則所有層的迴圈都結束
flag = True while flag: # 第一層迴圈 while flag: # 第二層迴圈 flag = False # tag變為False,所有while迴圈的條件都變為False # 案例: flag = True while flag: inp_user = input("請輸入使用者名稱>>>: ") inp_pwd = input("請輸入密碼>>>: ") if inp_user == "jack" and inp_pwd == "123": print('登入成功') # break flag = False else: print('使用者名稱或密碼錯誤')
while迴圈巢狀+break的使用
- 如果while迴圈嵌套了很多層,要想退出每一層迴圈則需要在每一層迴圈都有一個break
while True: # 第一層迴圈 while True: # 第二層迴圈 while True: # 第三層迴圈 break # 終止第三層迴圈 break # 終止第二層迴圈 break # 終止第一層迴圈 # 案例: while True: inp_user = input("請輸入使用者名稱>>>: ") inp_pwd = input("請輸入密碼>>>: ") if inp_user == "jack" and inp_pwd == "123": print('登入成功!') while True: print(""" 0 退出 1 取款 2 存款 3 轉賬 """) choice = input("請輸入您的命令編號:") if choice == "0": break elif choice == "1": print("正在取款。。。") elif choice == "2": print("正在存款。。。") elif choice == "3": print("正在轉賬。。。") else: print("輸入的指令不存在") break else: print('使用者名稱或密碼錯誤')
while+continue:跳過本次迴圈,直接進入下一次迴圈
# 使用while迴圈打印出0-5但是不列印2和4 # 1.定義一個起始變數 count = 0 # 2.迴圈 while count < 6: if count == 2 or count == 4: count += 1 continue # continue同級別之後千萬別寫程式碼,寫了也不會執行 # 3.列印變數的值 print(count) # 4.變數值自增1 count += 1 """ continue會讓迴圈體程式碼直接回到條件判斷處重新判斷 """ # 案例: while True: inp_user = input("username>>>: ") inp_pwd = input("password>>>: ") # 判斷使用者名稱和密碼是否正確 if inp_user == "jack" and inp_pwd == "123": print('登入成功') # 輸入正確登入成功 break # 結束迴圈 else: print('使用者名稱或密碼錯誤') # continue # 一定不要加在最後一步
while+else:else的子程式碼塊會在while迴圈正常死亡時執行,沒有被break幹掉就叫正常死亡
# 案例一:正常死亡,迴圈正常執行 count = 0 while count < 5: if count == 2: count += 1 continue print(count) count += 1 else: print('====>') # 案例二:非正常死亡,如果執行過程中被break,就不會執行else的語句 count = 0 while count < 5: if count == 2: break print(count) count += 1 else: print('====>')
死迴圈:條件永遠為True
while True: print(1) """死迴圈會讓CPU極度繁忙 甚至奔潰"""
小練習:
""" 猜年齡的遊戲 普通要求 使用者可以有三次猜錯的機會 如果過程中猜對了直接退出 拔高要求 三次機會用完之後提示使用者是否繼續嘗試 如果是則再給三次機會 如果否則直接結束 """ real_age = 18 # 定義固定的年齡變數 count = 0 # 定義輸入次數變數 while True: # 三次機會用完會執行 if count == 3: choice = input("三次機會已用完啦!是否繼續?\n重新請輸入'q',退出請輸入't'>>>:") if choice == 'q' or choice == 'Q': count = 0 # 將猜測次數置為0 else: print('遊戲已結束'.center(35, '=')) break print('猜年齡遊戲'.center(35, '*')) age = int(input('請輸入年齡>>>:')) if age < real_age: print('害!猜小了,你還有:%s 次機會!' % (2 - count)) elif age > real_age: print('害!猜大了,你還有:%s 次機會,!' % (2 - count)) else: print('好傢伙猜對了,真厲害呀!') break count += 1
迴圈結構:for迴圈
-
1、什麼是for迴圈
- 迴圈就是重複做某件事,for迴圈是python提供第二種迴圈機制
-
2、為何要有for迴圈
- 理論上for迴圈能做的事情,while迴圈都可以做
- 之所以要有for迴圈,是因為for迴圈在迴圈取值(遍歷取值)比while迴圈更簡潔
for迴圈基本語法
for 變數名 in 可迭代物件: # 可迭代物件可以是字串,列表,字典,元組,集合 ... for迴圈體程式碼 # 例1 for i in ['a','b','c']: print(i) # 執行結果 a b c # 參照例1來介紹for迴圈的執行步驟 # 步驟1:從列表['a','b','c']中讀出第一個值賦值給item(item=‘a’),然後執行迴圈體程式碼 # 步驟2:從列表['a','b','c']中讀出第二個值賦值給item(item=‘b’),然後執行迴圈體程式碼 # 步驟3: 重複以上過程直到列表中的值讀盡 for迴圈的基本用法
# 案例1:遍歷列表 names = ["kevin", "tom", "jack", "lili", "lxx", "xxx"] for x in names: print(x) for x,y in [["name","kevin"],["age",18],["gender","male"]]: # x,y = ['name', 'kevin'] print(x,y) # 案例2:遍歷字典 dic={"k1":111,'K2':2222,"k3":333} for x in dic: # for 迴圈預設取的是字典的key賦值給變數名k print(x,dic[x]) # 案例3:遍歷字串 for x in "hello": print(x) msg="you can you up,no can no bb" for x in msg: print(x)
- 總結for迴圈與while迴圈的異同
-
1、相同之處: 都是迴圈,for迴圈可以乾的事,while迴圈也可以幹 2、不同之處: while迴圈稱之為條件迴圈,迴圈次數取決於條件何時變為假 for迴圈稱之為"取值迴圈",迴圈次數取決in後包含的值的個數
-
for+break:同while迴圈一樣
for i in [11,22,33,44,55]: if i == 33: break print(i)
for+continue:同while迴圈一樣
for i in [11,22,33,44,55]: if i == 33: continue print(i)
for+else:同while迴圈一樣
for i in [11,22,33,44,55]: if i == 33: break print(i) else: print('++++++++>')
range 關鍵字
for + range控制迴圈次數:range()
- in後直接放一個數據型別來控制迴圈次數有侷限性:
- 當迴圈次數過多時,資料型別包含值的格式需要伴隨著增加
# range功能介紹 # 第一種:一個引數 從0開始 顧頭不顧尾 for i in range(10): print(i) # 第二種:兩個引數 自定義起始位置 顧頭不顧尾 for i in range(4, 10): print(i) # 第三種:三個引數 第三個數字用來控制等差值 for i in range(2, 100, 10): print(i) """ 擴充套件知識 https://movie.douban.com/top250 第一頁 https://movie.douban.com/top250?start=25&filter= 第二頁 https://movie.douban.com/top250?start=50&filter= 第三頁 https://movie.douban.com/top250?start=75&filter= 第四頁 https://movie.douban.com/top250?start=0&filter= 推測第一頁 """ base_url = "https://movie.douban.com/top250?start=%s&filter=" for i in range(0, 250, 25): print(base_url % i) """ range在不同版本的直譯器中 本質不同 在python2.X中range會直接生成一個列表 在python2.X中有一個xrange也是迭代器(老母豬) 在python3.X中range是一個迭代器(老母豬) 節省記憶體空間 python2.X中xrange就是python3.x裡面的range """ # python2版本演示 ''' >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> >>> range(1,9) # 1...8 [1, 2, 3, 4, 5, 6, 7, 8] >>> >>> range(1,9,1) # 1 2 3 4 5 6 7 8 [1, 2, 3, 4, 5, 6, 7, 8] >>> range(1,9,2) # 1 3 5 7 [1, 3, 5, 7] ''' for i in range(30): print('===>') username='kevin' password='123' for i in range(3): inp_name = input('請輸入您的賬號:') inp_pwd = input('請輸入您的密碼:') if inp_name == username and inp_pwd == password: print('登入成功') break else: print('輸錯賬號密碼次數過多')
enumerate 關鍵字
for + enumerate
i,name=(0,"kevin") for i,name in enumerate(["kevin","tom","jack"]): # [(0,"kevin"),(1,"tom"),(2,"jack")] print(i,name) for x in enumerate({"k1":111,"k2":2222,"k3":3333}): print(x)
for迴圈的巢狀使用
複製# for i in range(3): # for j in range(5): # print("*", end='') # print() for i in range(1, 10): for j in range(1, i + 1): print('%s*%s=%s' % (i, j, i * j), end=' ') print()