Python執(zhí)行流程控制詳情
一 引子
流程控制即控制流程,具體指控制程序的執(zhí)行流程,而程序的執(zhí)行流程分為三種結構:順序結構(之前我們寫的代碼都是順序結構)、分支結構(用到if判斷)、循環(huán)結構(用到while與for)
二 分支結構
2.1 什么是分支結構
分支結構就是根據(jù)條件判斷的真假去執(zhí)行不同分支對應的子代碼
2.2 為什么要用分支結構
人類某些時候需要根據(jù)條件來決定做什么事情,比如:如果今天下雨,就帶傘
所以程序中必須有相應的機制來控制計算機具備人的這種判斷能力
2.3 如何使用分支結構
2.3.1 if語法
用if關鍵字來實現(xiàn)分支結構,完整語法如下
if 條件1: # 如果條件1的結果為True,就依次執(zhí)行:代碼1、代碼2,...... 代碼1 代碼2 ...... elif 條件2: # 如果條件2的結果為True,就依次執(zhí)行:代碼3、代碼4,...... 代碼3 代碼4 ...... elif 條件3: # 如果條件3的結果為True,就依次執(zhí)行:代碼5、代碼6,...... 代碼5 代碼6 ...... else: # 其它情況,就依次執(zhí)行:代碼7、代碼8,...... 代碼7 代碼8 ...... # 注意: # 1、python用相同縮進(4個空格表示一個縮進)來標識一組代碼塊,同一組代碼會自上而下依次運行 # 2、條件可以是任意表達式,但執(zhí)行結果必須為布爾類型 # 在if判斷中所有的數(shù)據(jù)類型也都會自動轉換成布爾類型 # 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,那么:優(yōu)秀
如果成績>=80且<90,那么:良好
如果成績>=70且<80,那么:普通
其他情況:很差
score=input('>>: ') score=int(score) if score >= 90: print('優(yōu)秀') elif score >= 80: print('良好') elif score >= 70: print('普通') else: print('很差')
案例5:if嵌套
#在表白的基礎上繼續(xù): #如果表白成功,那么:在一起 #否則:打印。。。 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 #根據(jù)用戶輸入內容打印其權限 ''' egon --> 超級管理員 tom --> 普通管理員 jack,rain --> 業(yè)務主管 其他 --> 普通用戶 ''' name=input('請輸入用戶名字:') if name == 'egon': print('超級管理員') elif name == 'tom': print('普通管理員') elif name == 'jack' or name == 'rain': print('業(yè)務主管') else: print('普通用戶')
三 循環(huán)結構
3.1 什么是循環(huán)結構
循環(huán)結構就是重復執(zhí)行某段代碼塊
3.2 為什么要用循環(huán)結構
人類某些時候需要重復做某件事情
所以程序中必須有相應的機制來控制計算機具備人的這種循環(huán)做事的能力
3.3 如何使用循環(huán)結構
3.3.1 while循環(huán)語法
python中有while與for兩種循環(huán)機制,其中while循環(huán)稱之為條件循環(huán),語法如下
while 條件: 代碼1 代碼2 代碼3 ...... # while的運行步驟: # 步驟1:如果條件為真,那么依次執(zhí)行:代碼1、代碼2、代碼3、...... # 步驟2:執(zhí)行完畢后再次判斷條件,如果條件為True則再次執(zhí)行:代碼1、代碼2、代碼3、......,如果條件為False,則循環(huán)終止
插圖:while循環(huán)
3.3.2 while循環(huán)應用案例
案例一:while循環(huán)的基本使用
用戶認證程序
#用戶認證程序的基本邏輯就是接收用戶輸入的用戶名密碼然后與程序中存放的用戶名密碼進行判斷,判斷成功則登陸成功,判斷失敗則輸出賬號或密碼錯誤 username = "jason" password = "123" inp_name = input("請輸入用戶名:") inp_pwd = input("請輸入密碼:") if inp_name == username and inp_pwd == password: print("登陸成功") else: print("輸入的用戶名或密碼錯誤!") #通常認證失敗的情況下,會要求用戶重新輸入用戶名和密碼進行驗證,如果我們想給用戶三次試錯機會,本質就是將上述代碼重復運行三遍,你總不會想著把代碼復制3次吧。。。。 username = "jason" password = "123" # 第一次驗證 inp_name = input("請輸入用戶名:") inp_pwd = input("請輸入密碼:") if inp_name == username and inp_pwd == password: print("登陸成功") else: print("輸入的用戶名或密碼錯誤!") # 第二次驗證 inp_name = input("請輸入用戶名:") inp_pwd = input("請輸入密碼:") if inp_name == username and inp_pwd == password: print("登陸成功") else: print("輸入的用戶名或密碼錯誤!") # 第三次驗證 inp_name = input("請輸入用戶名:") inp_pwd = input("請輸入密碼:") if inp_name == username and inp_pwd == password: print("登陸成功") else: print("輸入的用戶名或密碼錯誤!") #即使是小白的你,也覺得的太low了是不是,以后要修改功能還得修改3次,因此記住,寫重復的代碼是程序員最不恥的行為。 #那么如何做到不用寫重復代碼又能讓程序重復一段代碼多次呢? 循環(huán)語句就派上用場啦(使用while循環(huán)實現(xiàn)) username = "jason" password = "123" # 記錄錯誤驗證的次數(shù) 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循環(huán)后,代碼確實精簡多了,但問題是用戶輸入正確的用戶名密碼以后無法結束循環(huán),那如何結束掉一個循環(huán)呢?這就需要用到break了!
username = "jason" password = "123" # 記錄錯誤驗證的次數(shù) count = 0 while count < 3: inp_name = input("請輸入用戶名:") inp_pwd = input("請輸入密碼:") if inp_name == username and inp_pwd == password: print("登陸成功") break # 用于結束本層循環(huán) else: print("輸入的用戶名或密碼錯誤!") count += 1
案例三:while循環(huán)嵌套+break
如果while循環(huán)嵌套了很多層,要想退出每一層循環(huán)則需要在每一層循環(huán)都有一個break
username = "jason" password = "123" count = 0 while count < 3: # 第一層循環(huán) inp_name = input("請輸入用戶名:") inp_pwd = input("請輸入密碼:") if inp_name == username and inp_pwd == password: print("登陸成功") while True: # 第二層循環(huán) cmd = input('>>: ') if cmd == 'quit': break # 用于結束本層循環(huán),即第二層循環(huán) print('run <%s>' % cmd) break # 用于結束本層循環(huán),即第一層循環(huán) else: print("輸入的用戶名或密碼錯誤!") count += 1
案例四:while循環(huán)嵌套+tag的使用
針對嵌套多層的while循環(huán),如果我們的目的很明確就是要在某一層直接退出所有層的循環(huán),其實有一個竅門,就讓所有while循環(huán)的條件都用同一個變量,該變量的初始值為True,一旦在某一層將該變量的值改成False,則所有層的循環(huán)都結束
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變?yōu)镕alse, 所有while循環(huán)的條件都變?yōu)镕alse break print('run <%s>' % cmd) break # 用于結束本層循環(huán),即第一層循環(huán) else: print("輸入的用戶名或密碼錯誤!") count += 1
案例五:while+continue的使用
break代表結束本層循環(huán),而continue則用于結束本次循環(huán),直接進入下一次循環(huán)
# 打印1到10之間,除7以外的所有數(shù)字 number=11 while number>1: number -= 1 if number==7: continue # 結束掉本次循環(huán),即本次循環(huán)continue之后的代碼都不會運行了,而是直接進入下一次循環(huán) print(number)
案例五:while+else的使用
在while循環(huán)的后面,我們可以跟else語句,當while 循環(huán)正常執(zhí)行完并且中間沒有被break 中止的話,就會執(zhí)行else后面的語句,所以我們可以用else來驗證,循環(huán)是否正常結束
count = 0 while count <= 5 : count += 1 print("Loop",count) else: print("循環(huán)正常執(zhí)行完啦") print("-----out of while loop ------") 輸出 Loop 1 Loop 2 Loop 3 Loop 4 Loop 5 Loop 6 循環(huán)正常執(zhí)行完啦 #沒有被break打斷,所以執(zhí)行了該行代碼 -----out of while loop ------
如果執(zhí)行過程中被break,就不會執(zhí)行else的語句
count = 0 while count <= 5 : count += 1 if count == 3: break print("Loop",count) else: print("循環(huán)正常執(zhí)行完啦") print("-----out of while loop ------") 輸出 Loop 1 Loop 2 -----out of while loop ------ #由于循環(huán)被break打斷了,所以不執(zhí)行else后的輸出語句
練習1:
尋找1到100之間數(shù)字7最大的倍數(shù)(結果是98)
number=100 while number>0: if number%7==0: print(number) break number-=1
練習2:
age=18 count=0 while count<3: count+=1 guess = int(input(">>:")) if guess > age : print("猜的太大了,往小里試試...") elif guess < age : print("猜的太小了,往大里試試...") else: print("恭喜你,猜對了...")
3.3.3 for循環(huán)語法
循環(huán)結構的第二種實現(xiàn)方式是for循環(huán),for循環(huán)可以做的事情while循環(huán)都可以實現(xiàn),之所以用for循環(huán)是因為在循環(huán)取值(即遍歷值)時for循環(huán)比while循環(huán)的使用更為簡潔,
for循環(huán)語法如下
for 變量名 in 可迭代對象: # 此時只需知道可迭代對象可以是字符串\列表\字典,我們之后會專門講解可迭代對象 代碼一 代碼二 ... #例1 for item in ['a','b','c']: print(item) # 運行結果 a b c # 參照例1來介紹for循環(huán)的運行步驟 # 步驟1:從列表['a','b','c']中讀出第一個值賦值給item(item=‘a(chǎn)'),然后執(zhí)行循環(huán)體代碼 # 步驟2:從列表['a','b','c']中讀出第二個值賦值給item(item=‘b'),然后執(zhí)行循環(huán)體代碼 # 步驟3: 重復以上過程直到列表中的值讀盡
3.3.4 for循環(huán)應用案例
案例一:打印數(shù)字0-5
# 簡單版:for循環(huán)的實現(xiàn)方式 for count in range(6): # range(6)會產(chǎn)生從0-5這6個數(shù) print(count) # 復雜版:while循環(huán)的實現(xiàn)方式 count = 0 while count < 6: print(count) count += 1
案例二:遍歷字典
# 簡單版:for循環(huán)的實現(xiàn)方式 for k in {'name':'jason','age':18,'gender':'male'}: # for 循環(huán)默認取的是字典的key賦值給變量名k print(k) # 復雜版:while循環(huán)確實可以遍歷字典,后續(xù)將會迭代器部分詳細介紹
案例三:for循環(huán)嵌套
#請用for循環(huán)嵌套的方式打印如下圖形: ***** ***** ***** for i in range(3): for j in range(5): print("*",end='') print() # print()表示換行
注意:break 與 continue也可以用于for循環(huán),使用語法同while循環(huán)
練習一:
打印九九乘法表
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,空格數(shù)=4,*號數(shù)=1 *** # current_level=2,空格數(shù)=3,*號數(shù)=3 ***** # current_level=3,空格數(shù)=2,*號數(shù)=5 ******* # current_level=4,空格數(shù)=1,*號數(shù)=7 ********* # current_level=5,空格數(shù)=0,*號數(shù)=9 # 數(shù)學表達式 空格數(shù)=max_level-current_level *號數(shù)=2*current_level-1 ''' # 實現(xiàn): max_level=5 for current_level in range(1,max_level+1): for i in range(max_level-current_level): print(' ',end='') #在一行中連續(xù)打印多個空格 for j in range(2*current_level-1): print('*',end='') #在一行中連續(xù)打印多個空格 print()
到此這篇關于Python執(zhí)行流程控制 詳情的文章就介紹到這了,更多相關Python執(zhí)行流程內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python實現(xiàn)屏幕截圖的代碼及函數(shù)詳解
本文給大家分享一段關于python實現(xiàn)屏幕截圖及函數(shù)的代碼,代碼簡單易懂,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧2016-10-10教你使用Python pypinyin庫實現(xiàn)漢字轉拼音
今天,發(fā)現(xiàn)了一個好玩兒的庫,叫做 “pypinyin ”,用于幫助我們實現(xiàn)漢字轉拼音,文中有非常詳細的代碼示例,對正在學習python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05pyinstaller將含有多個py文件的python程序做成exe
這篇文章主要介紹了pyinstaller將含有多個py文件的python程序做成exe,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04