[TOC]
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、重慶小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了安龍免費(fèi)建站歡迎大家使用!
#一 引子:
流程控制即控制流程,具體指控制程序的執(zhí)行流程,而程序的執(zhí)行流程分為三種結(jié)構(gòu):順序結(jié)構(gòu)(之前我們寫(xiě)的代碼都是順序結(jié)構(gòu))、分支結(jié)構(gòu)(用到if判斷)、循環(huán)結(jié)構(gòu)(用到while與for)
插圖:惡搞圖20
#二 分支結(jié)構(gòu)
分支結(jié)構(gòu)就是根據(jù)條件判斷的真假去執(zhí)行不同分支對(duì)應(yīng)的子代碼
人類(lèi)某些時(shí)候需要根據(jù)條件來(lái)決定做什么事情,比如:如果今天下雨,就帶傘
所以程序中必須有相應(yīng)的機(jī)制來(lái)控制計(jì)算機(jī)具備人的這種判斷能力
###2.3.1 if語(yǔ)法
插圖:惡搞圖18
用if關(guān)鍵字來(lái)實(shí)現(xiàn)分支結(jié)構(gòu),完整語(yǔ)法如下
if 條件1: # 如果條件1的結(jié)果為T(mén)rue,就依次執(zhí)行:代碼1、代碼2,......
代碼1
代碼2
......
elif 條件2: # 如果條件2的結(jié)果為T(mén)rue,就依次執(zhí)行:代碼3、代碼4,......
代碼3
代碼4
......
elif 條件3: # 如果條件3的結(jié)果為T(mén)rue,就依次執(zhí)行:代碼5、代碼6,......
代碼5
代碼6
......
else: # 其它情況,就依次執(zhí)行:代碼7、代碼8,......
代碼7
代碼8
......
# 注意:
# 1、python用相同縮進(jìn)(4個(gè)空格表示一個(gè)縮進(jìn))來(lái)標(biāo)識(shí)一組代碼塊,同一組代碼會(huì)自上而下依次運(yùn)行
# 2、條件可以是任意表達(dá)式,但執(zhí)行結(jié)果必須為布爾類(lèi)型
# 在if判斷中所有的數(shù)據(jù)類(lèi)型也都會(huì)自動(dòng)轉(zhuǎn)換成布爾類(lèi)型
# 2.1、None,0,空(空字符串,空列表,空字典等)三種情況下轉(zhuǎn)換成的布爾值為False
# 2.2、其余均為T(mén)rue
###2.3.2 if應(yīng)用案例
插圖:惡搞圖19
案例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('什么愛(ài)情不愛(ài)情的,愛(ài)nmlgb的愛(ài)情,愛(ài)nmlg啊...')
else:
print('阿姨好')
插圖:惡搞圖23
練習(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)就是重復(fù)執(zhí)行某段代碼塊
人類(lèi)某些時(shí)候需要重復(fù)做某件事情
所以程序中必須有相應(yīng)的機(jī)制來(lái)控制計(jì)算機(jī)具備人的這種循環(huán)做事的能力
插圖:惡搞圖21
python中有while與for兩種循環(huán)機(jī)制,其中while循環(huán)稱(chēng)之為條件循環(huán),語(yǔ)法如下
while 條件:
代碼1
代碼2
代碼3
......
# while的運(yùn)行步驟:
# 步驟1:如果條件為真,那么依次執(zhí)行:代碼1、代碼2、代碼3、......
# 步驟2:執(zhí)行完畢后再次判斷條件,如果條件為T(mén)rue則再次執(zhí)行:代碼1、代碼2、代碼3、......,如果條件為False,則循環(huán)終止
插圖:while循環(huán)
插圖:惡搞圖19
案例一: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ò)誤!")
#即使是小白的你,也覺(jué)得的太low了是不是,以后要修改功能還得修改3次,因此記住,寫(xiě)重復(fù)的代碼是程序員最不恥的行為。
#那么如何做到不用寫(xiě)重復(fù)代碼又能讓程序重復(fù)一段代碼多次呢? 循環(huán)語(yǔ)句就派上用場(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)多了,但問(wèn)題是用戶輸入正確的用戶名密碼以后無(wú)法結(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è)竅門(mén),就讓所有while循環(huán)的條件都用同一個(gè)變量,該變量的初始值為T(mén)rue,一旦在某一層將該變量的值改成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語(yǔ)句,當(dāng)while 循環(huán)正常執(zhí)行完并且中間沒(méi)有被break 中止的話,就會(huì)執(zhí)行else后面的語(yǔ)句,所以我們可以用else來(lái)驗(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í)行完啦 #沒(méi)有被break打斷,所以執(zhí)行了該行代碼
-----out of while loop ------
如果執(zhí)行過(guò)程中被break,就不會(huì)執(zhí)行else的語(yǔ)句
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后的輸出語(yǔ)句
插圖:惡搞圖23
練習(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ì)了...")
插圖:惡搞圖22
循環(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)語(yǔ)法如下
for 變量名 in 可迭代對(duì)象: # 此時(shí)只需知道可迭代對(duì)象可以是字符串\列表\字典,我們之后會(huì)專(zhuān)門(mén)講解可迭代對(duì)象
代碼一
代碼二
...
#例1
for item in ['a','b','c']:
print(item)
# 運(yùn)行結(jié)果
a
b
c
# 參照例1來(lái)介紹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ù)以上過(guò)程直到列表中的值讀盡
插圖:惡搞圖19
案例一:打印數(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),使用語(yǔ)法同while循環(huán)
插圖:惡搞圖23
練習(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()
分享名稱(chēng):04-5python語(yǔ)法入門(mén)之流程控制
地址分享:http://vcdvsql.cn/article46/phoohg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、網(wǎng)站內(nèi)鏈、域名注冊(cè)、電子商務(wù)、企業(yè)網(wǎng)站制作、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
營(yíng)銷(xiāo)型網(wǎng)站建設(shè)知識(shí)