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

