您好,登錄后才能下訂單哦!
[TOC]
#一 引子:
流程控制即控制流程,具體指控制程序的執行流程,而程序的執行流程分為三種結構:順序結構(之前我們寫的代碼都是順序結構)、分支結構(用到if判斷)、循環結構(用到while與for)
插圖:惡搞圖20
#二 分支結構
分支結構就是根據條件判斷的真假去執行不同分支對應的子代碼
人類某些時候需要根據條件來決定做什么事情,比如:如果今天下雨,就帶傘
所以程序中必須有相應的機制來控制計算機具備人的這種判斷能力
###2.3.1 if語法
插圖:惡搞圖18
用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應用案例
插圖:惡搞圖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:
如果:成績>=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('阿姨好')
插圖:惡搞圖23
練習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('普通用戶')
循環結構就是重復執行某段代碼塊
人類某些時候需要重復做某件事情
所以程序中必須有相應的機制來控制計算機具備人的這種循環做事的能力
插圖:惡搞圖21
python中有while與for兩種循環機制,其中while循環稱之為條件循環,語法如下
while 條件:
代碼1
代碼2
代碼3
......
# while的運行步驟:
# 步驟1:如果條件為真,那么依次執行:代碼1、代碼2、代碼3、......
# 步驟2:執行完畢后再次判斷條件,如果條件為True則再次執行:代碼1、代碼2、代碼3、......,如果條件為False,則循環終止
插圖:while循環
插圖:惡搞圖19
案例一:while循環的基本使用
用戶認證程序
#用戶認證程序的基本邏輯就是接收用戶輸入的用戶名密碼然后與程序中存放的用戶名密碼進行判斷,判斷成功則登陸成功,判斷失敗則輸出賬號或密碼錯誤
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次,因此記住,寫重復的代碼是程序員最不恥的行為。
#那么如何做到不用寫重復代碼又能讓程序重復一段代碼多次呢? 循環語句就派上用場啦(使用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后的輸出語句
插圖:惡搞圖23
練習1:
尋找1到100之間數字7最大的倍數(結果是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("恭喜你,猜對了...")
插圖:惡搞圖22
循環結構的第二種實現方式是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: 重復以上過程直到列表中的值讀盡
插圖:惡搞圖19
案例一:打印數字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循環
插圖:惡搞圖23
練習一:
打印九九乘法表
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()
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。