Python流程控制
-
本章學習知識點
-
條件判斷:if-elif-else、三元表達式(result = a if cond else b)
-
循環:for 循環(遍歷 range / 容器)、while 循環、循環控制(break/continue)
-
輸入輸出:input ()(注意類型轉換)、print ()(格式化輸出:f-string/format)
-
一、輸入輸出
輸入輸出是程序與用户交互的橋樑,input() 用於獲取用户輸入,print() 用於展示結果。
1.1、input ()
-
語法:
變量 = input("提示信息:")- 核心特性:
- 無論用户輸入什麼,
input()都返回 字符串類型(需手動轉換為其他類型) - 執行
input()時,程序會暫停,等待用户輸入並按回車後繼續 - 提示信息可選(如
input()直接等待輸入,無提示)
- 無論用户輸入什麼,
- 核心特性:
-
基礎用法(字符串輸入)
# 示例:獲取字符串輸入 name = input("請輸入你的姓名:") print(f"你好,{name}!") # 直接使用字符串輸入 print(f"name 的類型:{type(name)}") # 輸出 <class 'str'> -
類型轉換(關鍵!處理數字輸入)
# 用户輸入數字(如年齡、成績)時,需用 int()/float() 轉換為數值類型,否則無法進行算術運算。 # 示例1:轉換為整數(int()) age_input = input("請輸入你的年齡:") age = int(age_input) # 轉換為整數 print(f"明年你將是 {age + 1} 歲") # 可正常進行算術運算 # 示例2:轉換為浮點數(float()) height_input = input("請輸入你的身高(米):") height = float(height_input) print(f"你的身高是 {height} 米,即 {height * 100} 釐米") # 示例3:異常處理(避免輸入非數字報錯) try: score = int(input("請輸入你的成績:")) print(f"你的成績是 {score} 分") except ValueError: print("輸入錯誤!請輸入整數成績")
1.2、print ()
print() 用於輸出內容,支持多種格式化方式,核心是讓輸出結果更易讀。
-
語法:
print(內容1, 內容2, ..., sep=' ', end='\n')-
sep:多個內容之間的分隔符(默認空格) -
end:輸出結束後的字符(默認換行\n,可改為空字符串''不換行)# 示例1:輸出多個內容 print("Python", "流程控制", "手冊") # 分隔符默認空格,輸出:Python 流程控制 手冊 print("Python", "流程控制", "手冊", sep="|") # 分隔符改為 |,輸出:Python|流程控制|手冊 # 示例2:控制換行 print("第一行", end="") # 結束不換行 print("第二行") # 輸出:第一行第二行 # 示例3:輸出變量 name = "小紅" age = 18 print("姓名:", name, "年齡:", age) # 輸出:姓名: 小紅 年齡: 18
-
-
格式化輸出(重點!三種常用方式)
-
方式 1:f-string(Python3.6+ 推薦,簡潔高效)
-
語法:
print(f"字符串內容 {變量/表達式} 字符串內容") -
特點:
- 用
f開頭,變量 / 表達式放在{}中 - 支持直接在
{}中寫表達式(如運算、函數調用) - 可讀性最強,書寫最簡潔
- 用
-
示例
# 示例1:基礎變量格式化 name = "小明" age = 20 print(f"姓名:{name},年齡:{age}") # 輸出:姓名:小明,年齡:20 # 示例2:表達式格式化 score = 85 print(f"成績:{score} 分,等級:{'優秀' if score >= 90 else '良好' if score >= 80 else '及格'}") print(f"成績的 2 倍:{score * 2}") # 支持運算表達式 # 示例3:數字格式化(保留小數、百分比等) pi = 3.1415926 print(f"圓周率(保留 2 位小數):{pi:.2f}") # 輸出 3.14 print(f"圓周率(保留 4 位小數):{pi:.4f}") # 輸出 3.1416 print(f"百分比格式:{0.75:.2%}") # 輸出 75.00% print(f"整數補零(3 位):{5:03d}") # 輸出 005
-
-
方式 2:format () 方法(兼容性強,支持 Python2/3)
-
語法:
print("字符串內容 {} 字符串內容".format(變量1, 變量2, ...)) -
特點:用
{}作為佔位符,通過format()傳入變量,支持位置參數、關鍵字參數 -
示例
# 示例1:位置參數 name = "小李" age = 22 print("姓名:{},年齡:{}".format(name, age)) # 按順序匹配 print("年齡:{1},姓名:{0}".format(name, age)) # 按索引匹配(0 對應 name,1 對應 age) # 示例2:關鍵字參數 print("姓名:{n},年齡:{a}".format(n="小張", a=25)) # 按關鍵字匹配 # 示例3:數字格式化(與 f-string 類似) pi = 3.1415926 print("圓周率(保留 2 位小數):{:.2f}".format(pi)) # 輸出 3.14 print("整數補零(3 位):{:03d}".format(8)) # 輸出 008
-
-
方式 3:% 格式化(老式方法,瞭解即可)
-
語法:
print("字符串內容 %s 字符串內容" % 變量) -
佔位符:
%s(字符串)、%d(整數)、%f(浮點數) -
特點:兼容性最強,但可讀性差,不推薦優先使用
-
示例
name = "小王" age = 19 pi = 3.14159 print("姓名:%s,年齡:%d" % (name, age)) # 輸出:姓名:小王,年齡:19 print("圓周率:%.2f" % pi) # 輸出:圓周率:3.14
-
-
二、條件判斷
if 語句(單條件判斷)、if-elif-else、嵌套條件判斷、三元表達式
-
基礎語法:if 語句(單條件判斷)
-
説明:條件表達式可以是布爾值、比較運算、邏輯運算等,結果必須是
True或Falseif 條件表達式: # 條件表達式結果為 True 時執行 代碼塊 # 縮進 4 空格 -
示例
# 示例1:布爾值條件 is_rainy = True if is_rainy: print("帶雨傘出門") # 條件為 True,執行該代碼塊 # 示例2:比較運算條件 age = 18 if age >= 18: print("已成年,可獨立辦理業務") # 18 >= 18 為 True,執行 # 示例3:邏輯運算條件 score = 85 if score >= 80 and score <= 100: print("成績優秀") # 85 在 80-100 之間,執行
-
-
多條件判斷:if-elif-else
-
特點:互斥性,只要有一個條件滿足,後續條件不再判斷(效率優化)
if 條件1: 代碼塊1 # 條件1 為 True 時執行 elif 條件2: 代碼塊2 # 條件1 為 False,條件2 為 True 時執行 elif 條件3: 代碼塊3 # 前兩個條件都為 False,條件3 為 True 時執行 else: 代碼塊4 # 所有條件都為 False 時執行 -
示例
# 實戰:成績分級 score = 75 if score >= 90: print("優秀") elif score >= 80: print("良好") elif score >= 60: print("及格") else: print("不及格") # 75 >=60 為 True,輸出“及格” # 實戰:用户權限判斷 user_role = "editor" # 角色:admin/editor/visitor if user_role == "admin": print("擁有所有權限:增刪改查") elif user_role == "editor": print("擁有編輯權限:增改查") else: print("擁有隻讀權限:查詢") # 輸出“擁有編輯權限:增改查”
-
-
嵌套條件判斷(條件內套條件)
-
語法:在
if/elif/else的代碼塊中,再嵌套一層或多層if語句 -
適用場景:需要先滿足外層條件,再判斷內層條件
# 實戰:登錄驗證(嵌套條件) username = "admin" password = "123456" is_verified = True # 是否已實名認證 if username == "admin" and password == "123456": print("賬號密碼驗證通過") if is_verified: print("已實名認證,登錄成功") # 外層條件滿足,內層條件也滿足 else: print("未實名認證,請完成認證後登錄") else: print("賬號或密碼錯誤")
-
-
三元表達式(簡潔版 if-else)
-
語法:
結果1 if 條件 else 結果2- 條件為
True時,返回結果1 - 條件為
False時,返回結果2
- 條件為
-
適用場景:簡單的二選一邏輯(替代簡短的
if-else,代碼更簡潔)# 示例1:基礎用法 age = 20 result = "成年" if age >= 18 else "未成年" print(result) # 輸出“成年” # 示例2:結合運算 a = 10 b = 20 max_num = a if a > b else b print(max_num) # 輸出 20(a < b,返回 b) # 示例3:嵌套三元表達式(不推薦多層,可讀性差) score = 70 result = "優秀" if score >= 90 else "良好" if score >= 80 else "及格" if score >= 60 else "不及格" print(result) # 輸出“及格” # 對比:三元表達式 vs if-else(簡潔性體現) # if-else 寫法(3行) if score >= 60: res = "通過" else: res = "未通過" # 三元表達式寫法(1行) res = "通過" if score >= 60 else "未通過"
-
-
條件判斷易錯點
- 忘記縮進:
if後面的代碼塊必須縮進 4 空格,否則報錯 - 條件表達式遺漏
::if 條件:末尾的冒號不能少(語法要求) - 多條件用
if而非elif:導致重複判斷(如成績分級用多個if會重複輸出) - 三元表達式嵌套過多:超過 2 層建議用
if-elif-else,保證可讀性
- 忘記縮進:
三、循環語句
Python 提供兩種循環:
for循環(適合已知循環次數)和while循環(適合未知循環次數)。
3.1、for循環
説明:遍歷循環:已知次數 / 可迭代對象, 三種: 遍歷 range, 遍歷容器,枚舉遍歷
-
語法
for 變量 in 可迭代對象: 代碼塊 # 縮進 4 空格- 可迭代對象:能逐一取出元素的對象,如
range、列表、字符串、字典、集合等 - 核心:遍歷可迭代對象的每個元素,執行一次代碼塊
- 可迭代對象:能逐一取出元素的對象,如
-
遍歷 range(生成整數序列,適合固定次數循環)
-
語法:
range(n):生成 0 ~ n-1 的整數(如range(5)→ 0,1,2,3,4)range(start, end):生成 start ~ end-1 的整數(左閉右開,如range(1,5)→ 1,2,3,4)range(start, end, step):步長為 step(每次遞增 / 遞減 step,如range(1,10,2)→ 1,3,5,7,9)
-
示例
# 示例1:循環 5 次(range(5)) for i in range(5): print(f"第 {i+1} 次循環") # i 從 0 到 4,輸出 1-5 次 # 示例2:循環 1-10(range(1,11)) sum_1_10 = 0 for num in range(1, 11): sum_1_10 += num # 累加 1-10 的和 print("1-10 的和:", sum_1_10) # 輸出 55 # 示例3:步長為 3(range(3, 15, 3)) for num in range(3, 15, 3): print(num, end=" ") # 輸出 3 6 9 12
-
-
遍歷容器(列表、字符串、字典等)
-
示例
# 示例1:遍歷列表 fruits = ["蘋果", "香蕉", "橙子"] for fruit in fruits: print(f"我喜歡吃 {fruit}") # 依次輸出每個水果 # 示例2:遍歷字符串(逐個字符) s = "Python" for char in s: print(f"字符:{char}") # 輸出 P y t h o n # 示例3:遍歷字典(三種方式) person = {"name": "小明", "age": 20, "gender": "男"} # 方式1:遍歷鍵(默認) for key in person: print(f"鍵:{key},值:{person[key]}") # 方式2:遍歷鍵值對(推薦) for key, value in person.items(): print(f"鍵:{key},值:{value}") # 方式3:遍歷值 for value in person.values(): print(f"值:{value}") # 示例4:遍歷集合(無序,去重) nums = {1, 2, 2, 3} for num in nums: print(num, end=" ") # 輸出 1 2 3(無序)
-
-
枚舉遍歷(enumerate:獲取索引 + 元素)
-
語法:
for 索引, 元素 in enumerate(可迭代對象, start=0): -
作用:遍歷的同時獲取元素的索引(默認從 0 開始,
start可指定起始值) -
示例
# 示例:枚舉列表(索引從 1 開始) courses = ["語文", "數學", "英語"] for idx, course in enumerate(courses, start=1): print(f"第 {idx} 門課:{course}") # 輸出: # 第 1 門課:語文 # 第 2 門課:數學 # 第 3 門課:英語 # 示例:枚舉字符串(索引從 0 開始) s = "Hello" for idx, char in enumerate(s): print(f"索引 {idx}:{char}")
-
3.2、while循環
説明:條件循環:未知次數,滿足條件就循環, 兩種: break 和 continue
-
語法:
while 條件表達式: 代碼塊 # 縮進 4 空格 (必須有修改條件的代碼,否則無限循環)-
核心:條件表達式為
True時,重複執行代碼塊;為False時,退出循環 -
關鍵:代碼塊中必須包含修改條件的語句(如
num +=1),否則會無限循環 -
示例
# 示例1:基礎用法(循環 5 次) count = 0 while count < 5: print(f"循環次數:{count+1}") count += 1 # 修改條件(count 遞增,最終不滿足 count <5) # 示例2:計算 1-100 的和 sum_1_100 = 0 num = 1 while num <= 100: sum_1_100 += num num += 1 # 每次加 1,直到 num=101 退出 print("1-100 的和:", sum_1_100) # 輸出 5050 # 示例3:無限循環(需手動控制退出) while True: user_input = input("請輸入內容(輸入 'q' 退出):") if user_input == "q": print("退出循環") break # 退出循環 print(f"你輸入的是:{user_input}")
-
-
循環控制:break 和 continue(控制循環執行)
-
説明:
break和continue用於改變循環的默認執行流程,僅作用於當前所在的循環層。 -
break:強制退出整個循環
-
作用:一旦執行
break,立即退出當前循環(後續代碼不再執行,循環終止) -
適用場景:找到目標後提前退出循環(優化效率)
# 示例1:for 循環中用 break fruits = ["蘋果", "香蕉", "橙子", "葡萄"] target = "橙子" for fruit in fruits: if fruit == target: print(f"找到目標水果:{target}") break # 找到後立即退出循環,不再遍歷後續元素 print(f"當前遍歷:{fruit}") # 輸出: # 當前遍歷:蘋果 # 當前遍歷:香蕉 # 找到目標水果:橙子 # 示例2:while 循環中用 break num = 1 while num <= 10: if num == 5: print(f"找到數字 5,退出循環") break print(f"當前數字:{num}") num += 1 # 輸出到 num=5 後退出
-
-
continue:跳過當前次循環,繼續下一次
-
作用:執行
continue後,跳過當前循環的剩餘代碼,直接進入下一次循環 -
適用場景:需要跳過某些特定條件的循環
# 示例1:for 循環中用 continue(跳過偶數) for num in range(1, 10): if num % 2 == 0: continue # 跳過偶數,不執行後續 print print(f"奇數:{num}") # 只輸出奇數 1,3,5,7,9 # 示例2:while 循環中用 continue(跳過能被 3 整除的數) num = 0 while num < 10: num += 1 # 先遞增(避免死循環) if num % 3 == 0: continue print(f"不被 3 整除的數:{num}") # 輸出 1,2,4,5,7,8,10
-
-
嵌套循環中的 break/continue(僅作用於當前循環)
# 示例:嵌套 for 循環(break 只退出內層循環) for i in range(1, 4): # 外層循環:1,2,3 print(f"\n外層循環 i={i}") for j in range(1, 4): # 內層循環:1,2,3 if j == 2: break # 退出內層循環,外層循環繼續 print(f"內層循環 j={j}") # 輸出: # 外層循環 i=1 # 內層循環 j=1 # 外層循環 i=2 # 內層循環 j=1 # 外層循環 i=3 # 內層循環 j=1 # 示例:嵌套 while 循環(continue 只跳過當前內層循環) i = 1 while i <= 3: print(f"\n外層循環 i={i}") j = 1 while j <= 3: j += 1 if j == 2: continue print(f"內層循環 j={j}") i += 1 -
循環 else 語句(循環正常結束時執行)
-
語法
for 變量 in 可迭代對象: 代碼塊 else: else 代碼塊 # 循環正常結束(未被 break 中斷)時執行 while 條件: 代碼塊 else: else 代碼塊 # 條件為 False 時執行(未被 break 中斷) -
注意:如果循環被
break中斷,else代碼塊不會執行# 示例1:for 循環 else(正常結束) for num in range(1, 4): print(f"循環中:{num}") else: print("循環正常結束,執行 else 代碼塊") # 會執行 # 示例2:for 循環 else(被 break 中斷) for num in range(1, 4): if num == 2: break print(f"循環中:{num}") else: print("循環正常結束") # 不會執行(被 break 中斷) # 示例3:while 循環 else(用於判斷循環是否正常結束) num = 1 while num <= 3: print(f"循環中:{num}") num += 1 else: print("while 循環正常結束") # 會執行
-
-
四、綜合實戰
-
用户登錄驗證(3 次重試機會)
""" 功能:用户登錄驗證,支持 3 次重試 技術點:while 循環、if-elif-else、input()、break、格式化輸出 """ max_try = 3 # 最大重試次數 try_count = 0 # 已嘗試次數 while try_count < max_try: # 獲取用户輸入 username = input("請輸入用户名:") password = input("請輸入密碼:") # 驗證邏輯 if username == "admin" and password == "123456": print(f"登錄成功!歡迎你,{username}!") break # 登錄成功,退出循環 else: try_count += 1 remaining = max_try - try_count # 剩餘次數 if remaining > 0: print(f"用户名或密碼錯誤!剩餘 {remaining} 次機會") else: print("3 次登錄失敗,賬號已鎖定,請 10 分鐘後再試") -
猜數字遊戲(1-100 猜數字,提示大小)
""" 功能:猜數字遊戲,系統隨機生成 1-100 的數字,用户猜,提示大小 技術點:for 循環、if-elif-else、random 模塊、格式化輸出 """ import random # 系統生成 1-100 的隨機數 target = random.randint(1, 100) print("歡迎參加猜數字遊戲!系統已生成 1-100 的隨機數,你有 10 次機會") # 最多猜 10 次 for guess_count in range(1, 11): try: guess = int(input(f"第 {guess_count} 次猜測,請輸入數字:")) if guess < target: print("太小了!再試試更大的數字") elif guess > target: print("太大了!再試試更小的數字") else: # 猜對了,退出循環 print(f"恭喜你!第 {guess_count} 次猜對了!數字是 {target}") break except ValueError: print("輸入錯誤!請輸入 1-100 之間的整數") else: # 10 次都沒猜對 print(f"遊戲結束!你已用完 10 次機會,正確數字是 {target}") -
簡易計算器(支持加減乘除)
""" 功能:簡易計算器,支持加減乘除,循環計算直到用户退出 技術點:while 循環、if-elif-else、input() 類型轉換、異常處理 """ while True: print("\n===== 簡易計算器 =====") print("支持操作:1.加法 2.減法 3.乘法 4.除法 5.退出") # 獲取用户選擇 choice = input("請輸入操作編號(1-5):") if choice == "5": print("感謝使用,再見!") break # 驗證操作編號 if choice not in ["1", "2", "3", "4"]: print("輸入錯誤!請輸入 1-5 之間的編號") continue # 獲取兩個數字 try: num1 = float(input("請輸入第一個數字:")) num2 = float(input("請輸入第二個數字:")) except ValueError: print("輸入錯誤!請輸入數字") continue # 執行計算 if choice == "1": result = num1 + num2 print(f"{num1} + {num2} = {result}") elif choice == "2": result = num1 - num2 print(f"{num1} - {num2} = {result}") elif choice == "3": result = num1 * num2 print(f"{num1} × {num2} = {result}") elif choice == "4": if num2 == 0: print("錯誤!除數不能為 0") else: result = num1 / num2 print(f"{num1} ÷ {num2} = {result:.2f}")
五、易錯點總結
input()類型轉換遺漏:忘記將輸入轉換為int/float,導致算術運算報錯- 無限循環:
while循環中沒有修改條件的代碼,或條件永遠為True - 縮進錯誤:循環 / 條件語句的代碼塊未縮進,或縮進不一致
break/continue作用範圍:嵌套循環中,break只退出當前層循環,不影響外層- 格式化輸出語法錯誤:f-string 遺漏
f開頭,format()佔位符與變量數量不匹配 - 循環
else誤解:認為else是 “循環不執行時執行”,實際是 “循環正常結束時執行”