Python學習路線 - Python語言基礎入門 - 循環語句
- 前言
- 為什么學習循環語句
- while循環的基礎語法
- while循環語句
- while循環注意點
- while循環的基礎案例
- while循環的嵌套應用
- while循環的嵌套
- while循環的嵌套案例
- 補充知識 - print輸出不換行
- 補充知識 - 制表符\t
- 練習案例 - 打印九九乘法表
- for循環的基礎語法
- 基礎語法
- range語句
- 變量作用域
- for循環臨時變量作用域
- for循環的嵌套應用
- 循環中斷:break和continue
- continue
- continue在嵌套循環中的應用
- break
- break在嵌套循環中的應用
- 綜合案例
前言
循環普遍存在于日常生活中,同樣,在程序中,循環功能也是至關重要的基礎功能。
為什么學習循環語句
循環在程序中同判斷一樣,也是廣泛存在的,是非常多功能實現的基礎:
while循環的基礎語法
while循環語句
代碼示例:
"""
演示while循環的基礎應用
"""
i = 0
while i < 100:print("好好學習,天天向上")i += 1
while循環注意點
1.while的條件需得到布爾類型,True表示繼續循環,False表示結束循環
2.需要設置循環終止的條件,如i += 1配合 i < 100,就能確保100次后停止,否則將無限循環
3.空格縮進和if判斷一樣,都需要設置
while循環的基礎案例
練習案例:求1-100的和
需求:通過while循環,計算從1累加到100的和
提示:
1.終止條件不要忘記,設置為確保while循環100次
2.確保累加的數字,從1開始,到100結束
"""
演示while循環基礎練習題:求1-100的和
"""sum = 0
i = 1
while i <= 100:# sum += isum = sum + ii += 1print(f"1-100累加的和是:{sum}")
猜數字案例
設置一個范圍1-100的隨機整數變量,通過while循環,配合input語句,判斷輸入的數字是否等于隨機數
-
無限次機會,直到猜中為止
-
每一次猜不中,會提示大了或小了
-
猜完數字后,提示猜了幾次
-
提示:
-
無限次機會,終止條件不適合用數字累加來判斷
- 可以考慮布爾類型本身(True or False)
-
需要提示幾次猜中,就需要提供數字累加功能
-
隨機數可以使用:
import random
num = random.randint(1,100)
代碼示例:
"""
演示while循環的基礎案例 - 猜數字
"""
# 獲取范圍在1-100的隨機數字
import random
num = random.randint(1,100)# 通過一個布爾類型的變量,做循環是否繼續的標記
flag = True# 定義一個變量,記錄總共猜測了多少次
count = 0while flag:guess_num = int(input("請輸入你猜測的數字:"))if num == guess_num:print("猜中了")flag = Falseelse:if num > guess_num:print("你猜的數小了")else:print("你猜的數大了")count += 1
print(f"你總共猜測了{count}次")
while循環的嵌套應用
while循環的嵌套
代碼示例:
"""
演示while循環的嵌套使用
"""# 外層:表白100天得到控制
# 內層:每天的表白都送10只玫瑰花的控制i = 1
while i <= 100:print(f"今天是第{i}天,準備表白......")# 內層循環的控制變量j = 1while j <= 10:print(f"送給小美第{j}只玫瑰花")j += 1print("小美,我喜歡你")i += 1print(f"堅持到第{i-1}天,表白成功。")
注意點:
- 同判斷語句的嵌套一樣,循環語句的嵌套,要注意空格縮進。
- 基于空格縮進來決定層次關系
- 注意條件的設置,避免出現無限循環(除非真的需要無限循環)
while循環的嵌套案例
補充知識 - print輸出不換行
默認print語句輸出內容會自動換行,如下圖:
在即將完成的案例中,我們需要使用print語句,輸出不換行的功能,非常簡單,實現方式如下:
如上圖,在print語句中,加上end=''即可輸出不換行了
補充知識 - 制表符\t
在字符串中,有一個特殊符號:\t,效果等同于在鍵盤上按下:tab鍵。
它可以讓我們的多行字符串進行對齊。
比如:
print("Hello World")
print("Mry best")print("Hello\tWorld")
print("Mry123\tbest")
練習案例 - 打印九九乘法表
通過while循環,輸出如下九九乘法表內容
"""
演示使用while的嵌套循環
打印輸出九九乘法表
"""# 定義外層循環的控制變量
i = 1
while i <= 9:# 定義內層循環的控制變量j = 1while j <= i:print(f"{j} * {i} = {i*j}\t",end='')j += 1print("")i += 1
for循環的基礎語法
基礎語法
for循環
除了while循環語句外,Python同樣提供了for循環語句。
兩者能完成的功能基本差不多,但仍有一些區別:
- while循環的循環條件是自定義的,自行控制循環條件
- for循環是一種"輪詢"機制,是對一批內容進行"逐個處理"
for循環語句
代碼示例:
"""
演示for循環的基礎語法
"""name = "haohaoxuexi"for x in name:# 將name的內容,挨個取出賦予x零時變量# 就可在循環體內對x進行處理print(x)
可以看出,for循環是將字符串的內容:依次取出
所以,for循環也被稱之為:遍歷循環
注意點:
同while循環不同,for循環是無法定義循環條件的。
只能從被處理的數據集中,依次取出內容進行處理。
所以,理論上講,Python的for循環無法構建無限循環(被處理的數據集不可能無限大)
練習案例:數一數有幾個a
定義字符串變量name,內容為:“mry is a brand of China”
通過for循環,遍歷此字符串,統計有多少個英文字母:“a”
提示:
1.計數可以在循環外定義一個整數類型變量用來做累加計數
2.判斷是否為字母"a",可以通過if語句結合比較運算符來完成
"""
演示for循環的練習題:數一數有幾個a
"""# 統計如下字符串中,有多少個字母a
name = "mry is a brand of China"# 定義一個變量,用來統計有多少個a
count = 0# for 循環統計
# for 臨時變量 in 被統計的數據:
for x in name:if x == "a":count += 1print(f"被統計的字符串中有{count}個a")
range語句
語法中的:待處理數據集,嚴格來說,稱之為:序列類型
序列類型指,其中內容可以一個個依次取出的一種類型,包括:
- 字符串
- 列表
- 元組
- 等
目前我們只學了字符串類型,其余類型在后續章節會詳細學習它們
for循環語句,本質上是遍歷:序列類型
盡管除字符串外,其它的序列類型目前沒學習到,但是不妨礙我們通過學習range語句,獲得一個簡單的數字序列。
語法1:
range(num)
獲取一個從0開始,到num結束的數字序列(不含num本身)
如range(5)取得的數據是:[0,1,2,3,4]
語法2:
range(num1,num2)
獲得一個從num1開始,到num2結束的數字序列(不含num2本身)
如,range(5,10)取得的數據是:[5,6,7,8,9]
語法3:
range(num1,num2,step)
獲得一個從num1開始,到num2結束的數字序列(不含num2本身)
數字之間的步長,以step為準(step默認為1)
如,range(5,10,2)取得的數據是:[5,7,9]
"""
演示Python中的range()語句的基本使用
"""# range語法1 range(num)
for x in range(10):print(x)# range 語法2 range(num1,num2)
for x in range(5,10):# 從5開始,到10結束(不包含10本身)的一個數字序列print(x)# range 語法3 range(num1,num2,step)
for x in range(5,10,2):# 從5開始,到10結束(不包含10本身)的一個數字序列,數字之間的間隔是2print(x)
練習案例:有幾個偶數
定義一個數字變量num,內容隨意
并使用range()語句,獲取從1到num的序列,使用for循環遍歷它。
在遍歷的過程中,統計有多少偶數出現
提示:
1.序列可以使用:range(1, num)得到
2.偶數通過if來判斷,判斷數字余2是否為0即可
"""
演示1到100(不含100本身)范圍內的偶數個數
"""count = 0
num = range(1,100)
for x in num:if x % 2 == 0:count += 1print(f"1到100(不含100本身)范圍內,有{count}個偶數")
變量作用域
如圖代碼,思考一下:
紅框中的print語句,能否訪問到變量 i ?
for循環臨時變量作用域
for 臨時變量 in 待處理數據集:
循環滿足條件時執行的代碼
回看for循環的語法,我們會發現,將從數據集(序列)中取出的數據賦值給:臨時變量
為什么是臨時的呢?
臨時變量,在編程規范上,作用范圍(作用域),只限定在for循環內部
如果在for循環外部訪問臨時變量:
- 實際上是可以訪問到的
- 在編程規范上,是不允許、不建議這么做的
代碼示例:
"""
演示Python for循環臨時變量的作用域
"""for i in range(5):print(i)print(i)
如果實在需要在循環外訪問循環內的臨時變量,可以在循環外預先定義:
如圖,每一次循環的時候,都會將取出的值賦予i變量。
- 由于i變量是在循環之前(外)定義的
- 在循環外訪問i變量是合理的、允許的
注意點:
1.for循環中的臨時變量,其作用域限定為:
循環內
2.這種限定:
- 是編程規范的限定,而非強制限定
- 不遵守也能正常運行,但是不建議這樣做
- 如需訪問臨時變量,可以預先在循環外定義它
for循環的嵌套應用
代碼示例:
"""
演示嵌套應用for循環
"""# 堅持表白100天,每天都送10朵花
# range
i = 0
for i in range(1,101):print(f"今天是向小美表白的第{i}天,加油堅持。")# 寫內層的循環了for j in range(1, 11):print(f"給小美送的第{j}朵玫瑰花")print("小美我喜歡你")print(f"第{i}天,表白成功")
注意點:
如圖,和while循環一樣,需要注意縮進
因為通過縮進,確定層次關系
總結:
1.for循環的嵌套語法:
見下圖:
2.注意事項:
- 需要注意縮進,嵌套for循環同樣通過縮進確定層次關系
- for循環和while循環可以相互嵌套使用
練習案例-for循環打印九九乘法表
通過for循環,輸出如下九九乘法表內容
代碼示例:
"""
演示for循環打印九九乘法表
"""# 通過外層循環控制行數
for i in range(1,10):# 通過內層循環控制每一行的數據for j in range(1,i+1):# 在內層循環中輸出每一行的內容print(f"{j} * {i} = {j * i}\t", end='')# 外層循環可以通過print輸出一個回車符print()
循環中斷:break和continue
continue
continue關鍵字用于:中斷本次循環,直接進入下一次循環
continue可以用于:for循環和while循環效果一致
代碼演示:
# 演示循環中斷語句 continue
for i in range(1,6):print("語句1")continueprint("語句2")
continue在嵌套循環中的應用
continue關鍵字只可以控制:它所在的循環臨時中斷
代碼演示:
# 演示continue的嵌套應用
for i in range(1,6):print("語句1")for j in range(1,6):print("語句2")continueprint("語句3")print("語句4")
輸出結果:
D:\work\pythonProject\venv\Scripts\python.exe D:\work\pythonProject\03_循環中斷.py
語句1
語句2
語句2
語句2
語句2
語句2
語句4
語句1
語句2
語句2
語句2
語句2
語句2
語句4
語句1
語句2
語句2
語句2
語句2
語句2
語句4
語句1
語句2
語句2
語句2
語句2
語句2
語句4
語句1
語句2
語句2
語句2
語句2
語句2
語句4Process finished with exit code 0
break
break關鍵字用于:直接結束循環
break可以用于:for循環和while循環,效果一致
代碼演示:
# 演示循環中斷語句 break
for i in range(1, 101):print("語句1")breakprint("語句2")print("語句3")
break在嵌套循環中的應用
break關鍵字同樣只可以控制:它所在的循環結束
代碼演示:
# 演示break的嵌套應用
for i in range(1,6):print("語句1")for j in range(1,6):print("語句2")breakprint("語句3")print("語句4")
結果輸出:
D:\work\pythonProject\venv\Scripts\python.exe D:\work\pythonProject\03_循環中斷.py
語句1
語句2
語句4
語句1
語句2
語句4
語句1
語句2
語句4
語句1
語句2
語句4
語句1
語句2
語句4Process finished with exit code 0
總結
1.continue的作用是:
中斷所在循環的當次執行,直接進入下一次
2.break的作用是:
直接結束所在的循環
3.注意事項:
- continue和break,在for和while循環中作用一致
- 在嵌套循環中,只能作用在所在的循環上,無法對上層循環起作用
綜合案例
練習案例:發工資
某公司,賬戶余額有1W元,給20名員工發工資。
-員工編號從1到20,從編號1開始,依次領取工資,每人可領取1000元
-領工資時,財務判斷員工的績效分(1-10)(隨機生成),如果低于5,不發工資,換下一位
- 如果工資發完了,結束發工資。
提示:
- continue用于跳過員工,break直接結束發工資
- if判斷余額,不要忘記發完工資后,余額減少1000哦
代碼演示:
"""
演示循環綜合案例:發工資
"""
import random
# 定義賬戶余額變量
money = 10000
# for循環對員工發放工資
for num in range(1,21):score = random.randint(1,10)# 判斷余額足不足if money >= 1000:if score < 5:print(f"員工{num},績效分{score},低于5,下一位")# continue跳過發放continueelse:money -= 1000print(f"向員工{num}發放工資1000元,賬戶余額還剩余{money}元")else:print("工資發完了,下個月領取吧。")# break結束發放break
結果輸出:
D:\work\pythonProject\venv\Scripts\python.exe D:\work\pythonProject\04.py
員工1,績效分1,低于5,下一位
向員工2發放工資1000元,賬戶余額還剩余9000元
向員工3發放工資1000元,賬戶余額還剩余8000元
員工4,績效分2,低于5,下一位
向員工5發放工資1000元,賬戶余額還剩余7000元
向員工6發放工資1000元,賬戶余額還剩余6000元
向員工7發放工資1000元,賬戶余額還剩余5000元
向員工8發放工資1000元,賬戶余額還剩余4000元
員工9,績效分1,低于5,下一位
員工10,績效分4,低于5,下一位
員工11,績效分4,低于5,下一位
員工12,績效分4,低于5,下一位
向員工13發放工資1000元,賬戶余額還剩余3000元
向員工14發放工資1000元,賬戶余額還剩余2000元
員工15,績效分4,低于5,下一位
向員工16發放工資1000元,賬戶余額還剩余1000元
向員工17發放工資1000元,賬戶余額還剩余0元
工資發完了,下個月領取吧。Process finished with exit code 0