Python(第三章)流程控制語句、條件表示式、迴圈語句、跳轉語句
技術標籤:新學期 Python 從入門到放棄
第三章
本章概覽
介紹python中的程式結構、選擇語句、條件表示式。迴圈語句、跳轉語句、pass語句等內容
3.1 Python程式結構
計算機在解決某個問題時,主要有三種情形:分別是:順序執行所有語句、選擇執行部分語句、迴圈執行部分語句
順序流程
程式從上而下執行,編寫完成的語句按照編寫的順序依次被執行
選擇流程
程式主要根據條件語句的結果選擇執行不同的語句
迴圈流程
迴圈結構在一定條件下反覆執行某段程式塊,其中反覆執行的語句叫迴圈體,根據
判斷條件判斷是否終止執行
3.2 選擇語句
3.2.1 最簡單的 if 語句
# coding = utf-8
"""
最簡單的if語句
"""
if True: # 表示式
pass # 語句塊
其中,表示式可以是一個單純的布林值或者變數,也可以是比較表示式、或者邏輯表示式(例如:a > b and a != c) 如果表示式為真,則執行“語句塊”;如果表示式的值為假,就跳過語句塊,繼續執行後面的語句。
注意:
其他語言(C、C++、Java)中有switch 語句 ,可以實現多重選擇語句,但是Python中沒有switch語句,所以實現多重選擇功能時:只能用 if…elif…else 或者if語句巢狀
注意:
在Python中,當表示式的值為非零或者非空的字串時,if 語句也認為是條件成立的(即:為真值)
# coding = utf-8
"""
當表示式的值為非零或者非空的字串時
bool(0) = False / bool(0.0) = False / bool(None) = False
"""
if 4/2: # 表示式
pass # 語句塊
例項01
解決黃蓉給瑛姑出的難題 判斷一個數,除三餘二、除五餘三、除以七餘二
# coding = utf-8
"""
功能:解決黃蓉給瑛姑出的難題 判斷一個數,除三餘二、除五餘三、除以七餘二
"""
print("今有物不知其數、三三數之剩二、五五數之剩三、七七數之剩二")
number = int(input("請輸入你認為的數:")) # 輸入一個數
if number % 3 == 2 and number % 5 == 3 and number % 7 == 2: # 條件判斷是否符合
print("今有物不知其數、三三數之剩二、五五數之剩三、七七數之剩二 的數是 :" + str(number))
else:
print("Sorry 不是這個數")
注意:
使用 if 語句時,如果只有一條語句,那麼語句塊可以直接寫到冒號後面:
if a > b : max = a #不建議這麼寫
常見錯誤:
1:if語句後面未加冒號“:”
2: 使用if 語句,如果符合條件,需要執行多個邏輯行,則注意要有相同的縮排
如果只執行一句則注意縮排
if bmi < 18.5:
print("您的BMI值是:"+str(bmi)) # 輸出BIM值
print("您的體重過輕")
#----------------------**注意縮排**---------------------
if bmi < 18.5:
print("您的BMI值是:"+str(bmi)) # 輸出BIM值
print("您的體重過輕")
3.2.2 if…else 語句
Python中提供了 if … else 語句 其格式如下:
# coding = utf-8
"""
if ... else 語句
"""
if True: # 表示式1
pass # 表示式成立執行
else:
pass # 表示式不成立執行
使用==if … else == 語句時,表示式可以是單純的布林值或變數,也可以是比較表示式,或者邏輯表示式,如果條件滿足則執行if 後面的語句,否則,執行else 後面的語句塊,在漢語中表達為:“如果…否則…”
技巧
# coding = utf-8
"""
if ... else 語句技巧
"""
a = -9
if a > 0: # 表示式1
b = a # 表示式成立執行
else:
b = -a # 表示式不成立執行
print(b)
# ---------簡寫為:
a = -9
b = a if a > 0 else -a
print(b)
例項02
使用if … else 語句判斷輸入的數字是不是黃蓉所說的 除三餘二、除五餘三、除以七餘二
# coding = utf-8
"""
功能:解決黃蓉給瑛姑出的難題 判斷一個數,除三餘二、除五餘三、除以七餘二
"""
print("今有物不知其數、三三數之剩二、五五數之剩三、七七數之剩二")
number = int(input("請輸入你認為的數:")) # 輸入一個數
if number % 3 == 2 and number % 5 == 3 and number % 7 == 2: # 條件判斷是否符合
print(str(number) + "滿足條件" )
else:
print(str(number) + "不滿足條件" )
==注意 ==
在使用else 語句時,else一定不可以單獨使用,它必須和保留字 if 一起出現
==注意 ==
程式中使用 if … else 時,如果出現 if 語句多於 else 語句的情況,那麼該 else 語句將會根據縮排確定 else 語句屬於那個 if :
# coding = utf-8
"""
if ... else 語句縮排
"""
a = -1
if a >= 0:
if a > 0:
print("a 大於0")
else:
print("a 等於0")
else:
print("a 小於0")
3.2.3 if…elif…else 語句
Python中 if…elif…else 語句是一個多分支選擇語句,通常表現為“如果滿足某種條件,就會進行某種處理”,否則,如果滿足另外一種條件,則執行另一種處理
# coding = utf-8
"""
if ...elif...else 語句格式
"""
number = int("請輸入一個正整數判斷是否是偶數")
if number % 2 == 0:
print(str(number) + " :是偶數")
elif number % 2 != 0:
print(str(number) + " :是奇數")
else:
pass
e
==注意 ==
if 和 elif 都需要判斷表示式的真假,而else則不需要判斷;另外,elif 和 else 都必須與 if 一起使用,不能單獨出現
例項03
# coding = utf-8
"""
輸出玫瑰花語
"""
print("在古代希臘神話中、玫瑰花集愛情與美麗與一身,所以人們常用玫瑰花表達愛情")
print("但是不同朵數的玫瑰花代表的含義不同的\n")
# 獲取使用者輸入的朵數並轉化為整數
number = int(input("輸入您想送幾朵玫瑰花,AI會告訴您含義:"))
if number == 1:
print("1朵: 你是我的唯一")
elif number == 3:
print("3朵: I LOVE YOU")
elif number == 10:
print("10朵: 十全十美")
elif number == 99:
print("99朵:天長地久")
elif number == 108:
print("108朵:求婚")
else:
print("AI 也不知道了,可以考慮送 1 朵、3朵、10朵、99朵、109朵")
==注意 ==
當使用布林型別的變數作為判斷條件時,假設布林值為 flag 較為規範的格式如下:
if flag / if not flag 不能寫成 if flag = True or flag = False
3.2.4 if 巢狀語句
前面介紹的三種形式的 if 語句 ,在使用過程中是可以進行巢狀使用的
# coding = utf-8
"""
if 巢狀語句格式
"""
# if .... else 巢狀語句
if True:
if True:
pass
else:
pass
else:
pass
# if ....elif.... else 巢狀語句
if True:
if True:
pass
elif True:
pass
elif True:
pass
else:
pass
elif True:
if True:
pass
elif True:
if True:
pass
else:
pass
else:
pass
==注意 ==
if 選擇語句可以有多重巢狀方式,開發程式的過程中,可以根據自身需要選擇合適的巢狀方式,但是一定要嚴格控制好級別程式碼快的縮排
例項04
通過使用巢狀if語句實現根據資料輸入的酒精含量判斷是否為酒後駕車
# coding = utf-8
"""
if 巢狀語句:
通過使用巢狀if語句實現根據資料輸入的酒精含量判斷是否為酒後駕車
"""
print("\t\n 為了您和他人的安全,嚴禁酒後駕車!\n")
proof = int(input("請輸入每100毫升血液的酒精含量:")) # 獲取使用者的酒精含量,並轉為整型
if proof < 20:
print("\n您不構成飲酒行為,可以開車,但要注意安全")
else:
if proof < 80:
print("\n已經達到酒後駕車的標準,請不要開車")
else:
print("\n已經達到醉酒駕車的標準,親人兩行淚,千萬不要開車")
練習01 if語句&斷點除錯 #F44336
# coding = utf-8
"""
1:選擇語句
2:斷電除錯
"""
# sex = input("請輸入性別:")
# if sex == "男":
# print("您好,先生!")
# elif sex == "女":
# print("您好,女士!")
# else:
# print("性別未知")
# 除錯:讓程式中斷,逐語句執行,目的:審查執行過程中變數取值、審查程式執行流程
# 步驟:1、加斷點 shift + F9 2、除錯執行 3、執行下一步 F8 4、停止 ctrl + F2
# 練習斷點:
price = float(input("請輸入商品單價:"))
number = int(input("請輸入商品數量:"))
money = float(input("請輸入金額:"))
result = money - price * number
if result >= 0:
print("應該找回:" + str(result))
else:
print("金額不足")
**==練習02 季節月份判斷&算數運算 **
# coding = utf-8
"""
練習:在控制檯中獲取一個季度(春夏秋冬)
顯示相應的月份 春 --> 1 , 2, 3,
夏 --> 4,5,6
秋 --> 7,8,9
冬 --> 10,11,12
"""
season = input("請輸入季度:")
if season == "春":
print("春天:--> 1月 、 2月 、 3月 ")
elif season == "夏":
print("夏天:--> 4月 、 5月、 6月 ")
elif season == "秋":
print("秋天:--> 7月 、 8月、 9月 ")
else:
print("冬天:--> 10月 、 11月、 12月")
"""
練習:在控制檯中錄入一個數字
再錄入一個運算子(+ - * /) 最後再錄入一個數字 根據運算子計算兩個數字,
要求:如果運算子,不是加減乘除,則提示"運算子有誤"
"""
number01 = float(input("請輸入一個數字:"))
number02 = float(input("請再輸入一個數字:"))
op_ver = input("請輸入這兩個數的運算關係(+、-、*、/):")
if op_ver not in ('+', '-', '*', '/'):
print("運算子無效")
else:
if op_ver == "+":
print("您輸入的加運算,運算結果是:" + str(number01 + number02))
elif op_ver == "-":
print("您輸入的減運算,運算結果是:" + str(number01 - number02))
elif op_ver == "*":
print("您輸入的乘運算,運算結果是:" + str(number01 * number02))
else:
print("您輸入的除運算,運算結果是:" + str(number01 / number02))
練習 IF ELSE 巢狀,真值表達式,條件表示式
# coding = utf-8
"""
練習:在控制檯中獲取一個季度(春夏秋冬)
顯示相應的月份 春 --> 1 , 2, 3,
夏 --> 4,5,6
秋 --> 7,8,9
冬 --> 10,11,12
"""
season = input("請輸入季度:")
if season == "春":
print("春天:--> 1月 、 2月 、 3月 ")
elif season == "夏":
print("夏天:--> 4月 、 5月、 6月 ")
elif season == "秋":
print("秋天:--> 7月 、 8月、 9月 ")
else:
print("冬天:--> 10月 、 11月、 12月")
"""
練習:在控制檯中錄入一個數字
再錄入一個運算子(+ - * /) 最後再錄入一個數字 根據運算子計算兩個數字,
要求:如果運算子,不是加減乘除,則提示"運算子有誤"
"""
number01 = float(input("請輸入一個數字:"))
number02 = float(input("請再輸入一個數字:"))
op_ver = input("請輸入這兩個數的運算關係(+、-、*、/):")
if op_ver not in ('+', '-', '*', '/'):
print("運算子無效")
else:
if op_ver == "+":
print("您輸入的加運算,運算結果是:" + str(number01 + number02))
elif op_ver == "-":
print("您輸入的減運算,運算結果是:" + str(number01 - number02))
elif op_ver == "*":
print("您輸入的乘運算,運算結果是:" + str(number01 * number02))
else:
print("您輸入的除運算,運算結果是:" + str(number01 / number02))
"""
練習:在控制檯輸入四個數字,列印最大的數字
"""
print("輸入四個數字比較大小:\n\t")
number01 = int(input("請輸入第一個數:"))
number02 = int(input("請輸入第二個數:"))
number03 = int(input("請輸入第三個數:"))
number04 = int(input("請輸入第四個數:"))
number02 = number01 if number01 > number02 else number02
number03 = number03 if number03 > number02 else number02
number04 = number04 if number04 > number04 else number03
print(number04)
"""
在控制檯中錄入一個成績,判斷等級,優秀,良好,及格,不及格,輸入有誤
"""
grade = float(input("請輸入你的分數:"))
if 90 <= grade <= 100:
print("優秀")
elif 80 <= grade < 90:
print("良好")
elif 60 <= grade < 80:
print("及格")
elif grade < 60:
print("不及格")
else:
print("輸入有誤")
# 等價於上面
if grade > 100 or grade < 0:
print("輸入的有誤")
elif grade >= 90:
print("優秀")
elif grade >= 80:
print("良好")
elif grade >= 60:
print("及格")
else:
print("不及格")
"""
在控制檯中獲取一個月份 ,列印天數
"""
month = int(input("請輸入一個月份:"))
if month > 12 or month < 1:
print("輸入有誤")
elif month in (1, 3, 5, 7, 8, 10, 12):
print(str(month) + " 該月份共有31天")
elif month in (4, 6, 9, 11):
print(str(month) + " 該月份共有30天")
else:
year = int(input("請輸入年份判斷閏年還是平年:"))
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
print(str(month) + "這個月份所在的年份是閏年共有29天")
else:
print(str(month) + "這個月份所在的年份 是平年共有28天")
"""
練習1:在控制檯中獲取一個整數,如果是偶數為變數state賦值"偶數"、否則賦值"奇數"
練習2: 在控制檯中錄入一個年份,如果是閏年,給day賦值29 否則28
"""
state = "偶數" if int(input("請輸入一個正整數")) % 2 == 0 else "奇數"
print(state)
year = int(input("請輸入一個年份:"))
(year % 4 == 0 and year % 100 != 0)
day = 29 if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0) else 28
print(day)
3.3 條件表示式&三目運算
# coding = utf-8
"""
條件表示式、三目運算
"""
a = 10
b = 6
r = None
# -----正常的if語句判斷
if a > b:
r = a
else:
r = b
# -----等價於
r = a if a > b else b
state = "偶數" if int(input("請輸入一個正整數")) % 2 == 0 else "奇數"
3.4 迴圈語句
迴圈語句:反覆的重複一件事情,稱為迴圈,迴圈主要有兩種型別
- 重複一定次數,稱為計次迴圈,如 for
- 一直重複,直到條件不滿足時才結束的迴圈,稱為條件迴圈,這種迴圈會一直秩序下去,如while迴圈
註釋: #
在其他語言中(C、C++、JAVA)條件迴圈包括 do…while迴圈,但是在Python中沒有do…while 迴圈
3.4.1 while 迴圈
while迴圈是通過一個條件來控制是否要繼續反覆執行迴圈體中的語句
while 條件表示式:
迴圈體
# coding = utf-8
"""
功能:解決黃蓉給瑛姑出的難題 判斷一個數,除三餘二、除五餘三、除以七餘二
迴圈找出符合該條件的數字
"""
print("今有物不知其數,三三數之剩二、五五數之剩三、七七數之省二,問幾何?\n")
none = True # 作為迴圈條件的變數
number = 0 # 計數的變數
while none:
number += 1
if number % 3 == 2 and number % 5 == 3 and number % 7 == 2:
print("答曰,這個數是", number)
if number == 1000:
none = False
3.4.2 for 迴圈
for 迴圈體是一個依次洪福執行的迴圈。通常適用於列舉或遍歷序列。以及迭代的物件中的元素。
# coding = utf-8
"""
功能:for 語法格式
"""
for 迭代變數 in 物件:
迴圈體
"""
迭代變數:用於儲存讀取出的值
物件:要遍歷或迭代的物件(有序物件、字串、列表、元組)
迴圈體: 一組被重複執行的語句
"""
實現從1到100的累加,可以通過下面的程式碼實現:
# coding = utf-8
"""
功能:for 實現 1 到 100 的累加
"""
print("計算1+2+3+4+.....100的結果")
result = 0 # 儲存累加的結果變數
for i in range(101):
result += i # 實現累加功能
print(result) # 在迴圈結束時輸出結果
"""
range() 函式多用於 for
"""
注意:
range(start,end,step)
start: 用於指定計數的起始值,可以忽略,如果忽略則從0開始
end : 用於指定計算的結束值(但是不包括該值,如range(7),得到的是0~6 但是不包括7),不能省略,當range()函式中只有一個引數時,即表示指定的計數結束值
step : 用於指定步長,即兩個數之間的間隔,可以省略,如果省略則表示步長為1,例如range(1,7)表示得到 1、2、3、4、5、6
# 輸出10以內的奇數:
for i in range(1,10,2):
print(i,end = '')
注意: #
在Python中,如果想讓print列印語句的內容在一行上顯示,加上“end = '分割符號'”
print("列印內容",end = '')
# coding = utf-8
"""
功能:for 語法格式
解決黃蓉給瑛姑出的難題 判斷一個數,除三餘二、除五餘三、除以七餘二
迴圈找出符合該條件的數字
"""
print("今有物不知其數,三三數之剩二、五五數之剩三、七七數之省二,問幾何?\n")
for number in range(1, 1001, 1):
if number % 3 == 2 and number % 5 == 3 and number % 7 == 2:
print("答曰:這個數是:", number, end='/')
遍歷字串
# coding = utf-8
"""
功能:for 語法,遍歷字串
"""
string = "加油,騷年!"
for ch in string:
print(ch, end=" / ")
3.4.3 巢狀迴圈
在Python中,允許在一個迴圈體中巢狀另一個迴圈,稱之為迴圈迴圈巢狀。
# coding = utf-8
"""
功能:巢狀迴圈格式
"""
# 第一種迴圈方式
while True:
while True:
print("迴圈體")
print("迴圈體")
# 第二種迴圈方式
for i in range(101):
for j in range(101):
print("迴圈體")
print("迴圈體")
# 第三種迴圈方式
while True:
for j in range(101):
print("迴圈體")
print("迴圈體")
# 第四種迴圈方式
for i in range(101):
while True:
print("迴圈體")
print("迴圈體")
巢狀迴圈之一:九九乘法表
# coding = utf-8
"""
功能:九九乘法表
"""
# 九九乘法表格式一
for i in range(1, 10, 1): # 輸出9行
for j in range(1, i + 1, 1):
print(str(i) + " * " + str(j) + " = " + str(i * j) + "\t", end=' ')
print('')
print('########################################################################')
# 九九乘法表格式二
for i in range(9, 0, -1): # 輸出9行
for j in range(1, i + 1, 1):
print(str(i) + " * " + str(j) + " = " + str(i * j) + "\t", end=' ')
print('')
print('########################################################################')
# 九九乘法表格式三
for i in range(1, 10, 1): # 輸出9行
for j in range(9, 0, -1):
if i >= j:
print(str(i) + " * " + str(j) + " = " + str(i * j), end="\t")
else:
print(" ", end='\t')
print('')
print('########################################################################')
# 九九乘法表格式四
# coding = utf-8
"""
功能:九九乘法表
"""
# 九九乘法表格式一
for i in range(1, 10, 1): # 輸出9行
for j in range(1, i + 1, 1):
print(str(i) + " * " + str(j) + " = " + str(i * j) + "\t", end=' ')
print('')
print('########################################################################')
# 九九乘法表格式二
for i in range(9, 0, -1): # 輸出9行
for j in range(1, i + 1, 1):
print(str(i) + " * " + str(j) + " = " + str(i * j) + "\t", end=' ')
print('')
print('########################################################################')
# 九九乘法表格式三
for i in range(1, 10, 1): # 輸出9行
for j in range(9, 0, -1):
if i >= j:
print(str(i) + " * " + str(j) + " = " + str(i * j), end="\t")
else:
print(" ", end='\t')
print('')
print('########################################################################')
# 九九乘法表格式四
for i in range(9, 0, -1): # 輸出9行
for j in range(9, 0, -1):
if i >= j:
print(str(i) + " * " + str(j) + " = " + str(i * j), end="\t")
else:
print(" ", end='\t')
print('')
3.5 跳轉語句
實現中間離開迴圈,也就是在for語句執行結束之前、或者while迴圈之前找到結束條件之前,有兩種方式來做到
- 使用continue 語句直接跳轉到迴圈的下一個迭代
- 使用break完全終止迴圈
3.5.1 break 語句
break 語句可以終止當前的迴圈,包括 while、for 在內的所有控制語句。
注意 #: break語句一般結合 if 語句 進行搭配使用、表示在某種條件下,跳出迴圈,如果使用巢狀迴圈,break將跳出最內層的迴圈。
while break
# coding = utf-8
"""
功能:while 語句中的 break 語句格式
"""
while True:
print("迴圈體")
if True:
break
for break
# coding = utf-8
"""
功能:break 語句格式
"""
for i in range(1, 101, 1):
print("迴圈體內部")
if i == 100:
break
例項
# coding = utf-8
"""
功能:break 演示
"""
print("今有物不知其數,三三數之剩二、五五數之剩三、七七數之剩二,問幾何 \n")
for number in range(1, 1001):
if number % 3 == 2 and number % 5 == 3 and number % 7 == 2:
print("答曰:這個數是", number)
break
3.5.2 contiune 語句
continue 語句的作用沒有break 語句強大,它只能終止本次迴圈而提前進入到下一次迴圈中。
注意: #
continue語句一般會與if 語句搭配使用,表示在某種條件下,跳過當前迴圈的剩餘語句,然後繼續進行下一輪迴圈,如果使用巢狀迴圈,continue語句只跳過最內層迴圈中的剩餘語句
while continue
# coding = utf-8
"""
功能:continue 演示
"""
while True:
print("迴圈體程式碼")
if True:
continue
for continue
# coding = utf-8
"""
功能:continue 演示
"""
for i in range(1,101,1):
print("迴圈體程式碼")
if True:
continue
例項:逢七拍腿遊戲
# coding = utf-8
"""
功能:continue 演示:逢七拍腿遊戲
"""
total = 99 # 記錄拍腿次數的變數
for number in range(1, 100):
if number % 7 == 0:
print(number)
continue
else:
string = str(number)
if string.endswith("7"):
print(string, "###########")
continue
total -= 1
print('從1到99共拍腿', total)
3.6 pass 語句
在Python中有一個pass語句,表示空語句。它不做任何事情,一般起到佔位作用。例如,在用for 迴圈輸出 1 ~ 10 之間 的 偶數,在不是偶數時,應用pass 語句佔位置。
# coding = utf-8
"""
功能:pass 語句演示
"""
for i in range(1, 10, 1):
if i % 2 == 0:
print(i, " 是偶數\t", end='')
else:
pass
實戰練習 #F44336
# coding = utf-8
import random
"""
迴圈for_while_控制語句break_continue 練習
"""
# 練習1:模擬支付寶螞蟻森林的能量產生過程
while True:
print("查詢能量請輸入能量來源!退出請按 0\t\n")
print("能量來源如下:\n")
print("生活繳費、行走捐、共享單車、線下支付、網路購票\n")
flag = input()
if flag not in ("生活繳費", "行走捐", "共享單車", "線下支付", "網路購票", "0"):
print("輸入有誤請重新輸入:")
else:
if flag == "0":
break
elif flag == "生活繳費":
print("100g")
elif flag == "行走捐":
print("200g")
elif flag == "共享單車":
print("150g")
elif flag == "線下支付":
print("50g")
else:
print("50g")
# 練習1:猜數字遊戲,隨機生成一個1到100的數字,十次機會猜數字
flag = 1
random_int = random.randint(1, 100)
while True:
if flag == 10:
print("你個垃圾,遊戲退出:")
break
else:
number = int(input("請輸入一個1到100以內正整數,一共十次機會 - 第 " + str(flag) + "次輸入:\n"))
if number == random_int:
print("您第 ", flag, " 猜對了,真厲害")
break
else:
if number > random_int:
print("大了 、 請輸入錯誤請重試")
else:
print("小了 、 請輸入錯誤請重試")
flag += 1
# 模擬 10086 功能
"""
1:輸入1 顯示當前餘額
2:輸入2 顯示您當前剩餘的流量
3:輸入3 顯示您當前的剩餘通話
4:輸入0 退出系統
"""
print("------------ 10068 查詢系統 ---------")
while True:
number = int(input("""
1:輸入 1 顯示當前餘額
2:輸入 2 顯示您當前剩餘的流量
3:輸入 3 顯示您當前的剩餘通話
4:輸入 0 退出系統
"""))
if number not in (1, 2, 3, 0):
print("輸入有誤請重新輸入")
else:
if number == 1:
print("當前餘額:100")
elif number == 2:
print("當前剩餘流量:24G")
elif number == 3:
print("當前剩餘通話:24H")
else:
break