Python流程控制之條件循環(huán)與異常處理實(shí)戰(zhàn)指南
前言
在編程中,流程控制是決定程序執(zhí)行路徑的核心機(jī)制。Python 提供了清晰、簡(jiǎn)潔的語法來實(shí)現(xiàn)條件判斷、循環(huán)和異常處理,使代碼邏輯更靈活、健壯。
1. 條件判斷語句
條件判斷用于根據(jù)布爾值(True/False)決定是否執(zhí)行某段代碼。
1.1if語句
最簡(jiǎn)單的條件判斷形式:當(dāng)條件為 True 時(shí),執(zhí)行代碼塊。
age = 18
if age >= 18:
print("你已成年,可以投票!")?? 注意:Python 使用縮進(jìn)(通常是 4 個(gè)空格)表示代碼塊,而非大括號(hào)
{}。
1.2 布爾值(Boolean)
條件判斷的核心是布爾表達(dá)式,其結(jié)果為 True 或 False。
常見返回布爾值的操作:
print(5 > 3) # True
print("a" == "A") # False(區(qū)分大小寫)
print(10 != 20) # True哪些值會(huì)被視為False?
FalseNone- 數(shù)字
0、0.0 - 空字符串
"" - 空列表
[]、空字典{}、空元組()
其余所有值均為 True。
if []:
print("不會(huì)執(zhí)行")
if "Hello":
print("非空字符串為 True") # 會(huì)執(zhí)行1.3if + else語句
提供“二選一”邏輯:條件成立執(zhí)行 if 塊,否則執(zhí)行 else 塊。
score = 85
if score >= 60:
print("及格!")
else:
print("不及格,請(qǐng)努力!")1.4if + elif + else語句
用于多分支判斷。elif 是 “else if” 的縮寫。
a = int(input("請(qǐng)輸入您的年齡:"))
if a < 10:
print("您是兒童")
elif a < 16:
print("您是少年")
else:
print("您比少年大")?? 執(zhí)行規(guī)則:從上到下依次判斷,一旦某個(gè)條件為 True,后續(xù) elif/else 將被跳過。
1.5 多個(gè)elif語句
Python 允許任意數(shù)量的 elif,適用于復(fù)雜分級(jí)場(chǎng)景。當(dāng)需要對(duì)多個(gè)條件進(jìn)行判斷時(shí),可以插入多個(gè)elif語句。
a = int(input("請(qǐng)輸入您的年齡:"))
if a < 10:
print("您是兒童")
elif a < 16:
print("您是少年")
elif a < 30:
print("您是青年")
elif a < 59:
print("您是中年人")
else:
print("您是老年人")代碼執(zhí)行結(jié)果(當(dāng)用戶輸入79):
請(qǐng)輸入您的年齡:79
您是老年人
1.6 條件判斷語句的嵌套
條件判斷語句中的代碼塊也可以包含一個(gè)或多個(gè)條件判斷語句。在 if 塊內(nèi)部再寫 if,實(shí)現(xiàn)更精細(xì)的邏輯控制。
a = int(input("請(qǐng)輸入您的年齡:"))
if a < 10:
if a < 1:
print("您是嬰兒")
else:
print("您是兒童")
elif a < 16:
print("您是少年")
else:
print("您比少年大")?? 建議:嵌套不宜過深(一般不超過 3 層),否則影響可讀性。
1.7 多個(gè)條件判斷語句
使用邏輯運(yùn)算符組合多個(gè)條件:
| 運(yùn)算符 | 含義 | 示例 |
|---|---|---|
and | 且(都為真才真) | age >= 18 and score >= 60 |
or | 或(有一個(gè)為真即真) | weather == "sunny" or temp > 30 |
not | 非(取反) | not is_raining |
username = "admin"
password = "123456"
if username == "admin" and password == "123456":
print("登錄成功!")
else:
print("用戶名或密碼錯(cuò)誤")1.8if + else的復(fù)合寫法(三元表達(dá)式)
Python 支持一行寫法,適用于簡(jiǎn)單賦值或返回。
語法:
表達(dá)式1 if 條件判斷語句 else 表達(dá)式2
示例:
age = 20
status = "成年" if age >= 18 else "未成年"
print(status) # 成年
# 也可用于 print
print("及格" if score >= 60 else "不及格")? 優(yōu)點(diǎn):簡(jiǎn)潔;? 缺點(diǎn):復(fù)雜邏輯不適用,可讀性下降。
2. 循環(huán)語句
循環(huán)用于重復(fù)執(zhí)行某段代碼,直到滿足特定條件。
2.1for循環(huán)
用于遍歷可迭代對(duì)象(如字符串、列表、字典、range 等)。
基本用法:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)range()函數(shù)
生成數(shù)字序列,常用于控制循環(huán)次數(shù)。
| 調(diào)用方式 | 說明 | 示例 |
|---|---|---|
range(stop) | 從 0 到 stop-1 | range(3) → 0,1,2 |
range(start, stop) | 從 start 到 stop-1 | range(2, 5) → 2,3,4 |
range(start, stop, step) | 指定步長 | range(0, 10, 2) → 0,2,4,6,8 |
for i in range(5):
print(f"第 {i+1} 次循環(huán)")for循環(huán)的復(fù)合寫法(列表推導(dǎo)式)
一行生成新列表,本質(zhì)是 for 的簡(jiǎn)化。
# 普通寫法
squares = []
for x in range(5):
squares.append(x ** 2)
# 列表推導(dǎo)式(推薦)
squares = [x ** 2 for x in range(5)]
print(squares) # [0, 1, 4, 9, 16]?? 列表推導(dǎo)式還可加條件:
evens = [x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]
2.2while循環(huán)
只要條件為 True,就持續(xù)循環(huán)。
count = 0
while count < 3:
print(f"計(jì)數(shù):{count}")
count += 1 # 必須有退出機(jī)制,否則死循環(huán)!?? 警惕死循環(huán):確保循環(huán)體內(nèi)有改變條件的語句。
2.3 嵌套循環(huán)
在一個(gè)循環(huán)內(nèi)部再寫一個(gè)循環(huán),常用于處理二維結(jié)構(gòu)。
import time
for i in range(60):
for j in range(60):
time.sleep(1)
print(f'當(dāng)前時(shí)間為 {i} 分 {j} 秒')
print(f"{i} 分鐘結(jié)束")
運(yùn)行結(jié)果:

2.4break和continue語句
break:立即退出整個(gè)循環(huán)continue:跳過本次循環(huán)剩余代碼,進(jìn)入下一次循環(huán)
示例:
# break:找到目標(biāo)就停止
for num in [1, 3, 5, 7, 9]:
if num == 5:
print("找到 5,退出循環(huán)")
break
print(num)
# continue:跳過偶數(shù)
for i in range(1, 6):
if i % 2 == 0:
continue
print(i) # 輸出:1, 3, 5?
break和continue在for和while中均可使用。
3. 異常處理語句
程序運(yùn)行時(shí)可能遇到錯(cuò)誤(如除零、文件不存在)。異常處理機(jī)制可捕獲錯(cuò)誤并優(yōu)雅處理,避免程序崩潰。
3.1 異常處理語句的使用
使用 try...except 結(jié)構(gòu):
try:
n = int(input("請(qǐng)輸入一個(gè)整數(shù):"))
print(n)
except:
print("您輸入的不是一個(gè)整數(shù)")
a = 3
print("a的內(nèi)容為:", a)完整結(jié)構(gòu):
try:
# 可能出錯(cuò)的代碼
except ExceptionType1:
# 處理異常1
except ExceptionType2:
# 處理異常2
else:
# 無異常時(shí)執(zhí)行
finally:
# 無論是否有異常,都會(huì)執(zhí)行(常用于清理資源)3.2 異常捕獲
捕獲多種異常:
try:
num = int(input("請(qǐng)輸入一個(gè)數(shù)字:"))
result = 100 / num
except ValueError:
print("輸入的不是有效數(shù)字!")
except ZeroDivisionError:
print("不能除以零!")
except Exception as e:
print(f"發(fā)生了未知錯(cuò)誤:{e}")
else:
print(f"結(jié)果是:{result}")
finally:
print("程序結(jié)束。")常見內(nèi)置異常類型:
| 異常 | 觸發(fā)場(chǎng)景 |
|---|---|
ValueError | 類型轉(zhuǎn)換失?。ㄈ?nbsp;int("abc")) |
ZeroDivisionError | 除零錯(cuò)誤 |
FileNotFoundError | 文件未找到 |
IndexError | 列表索引越界 |
KeyError | 字典鍵不存在 |
? 最佳實(shí)踐:
- 盡量捕獲具體異常,而非籠統(tǒng)的
Exception- 在
except中記錄日志或提示用戶,不要靜默忽略錯(cuò)誤
項(xiàng)目案例:實(shí)現(xiàn)超市收銀系統(tǒng)
項(xiàng)目描述:
某超市的白菜標(biāo)價(jià)為2.5元/千克,根據(jù)頗客購買量的不同有不同的折扣。
- 如果顧客的購買量小于2千克,則 打9折;
- 如果顧客的購買量為2~4(不包括4)千克,則打8折;
- 如果顧客的購買量為4~10(不包括10)千克,則打6折;
- 如果顧客的購買量大于等于10千克,則打4折。
項(xiàng)目任務(wù):
現(xiàn)需要設(shè)計(jì)一個(gè)代碼程序,用于實(shí)現(xiàn)在營業(yè)員輸入白菜重量之后自動(dòng)計(jì)算出顧客需要支付的金額。
項(xiàng)目實(shí)現(xiàn)代碼:
while True:
try:
weight = float(input('請(qǐng)輸入白菜的重量:'))
break
except:
print("輸入錯(cuò)誤,重新輸入,", end='')
if weight < 2.0:
print("請(qǐng)付款:", weight*2.5*0.9, '元')
elif weight < 4.0:
print("請(qǐng)付款:", weight*2.5*0.8, '元')
elif weight < 10.0:
print("請(qǐng)付款:", weight*2.5*0.6, '元')
else:
print("請(qǐng)付款:", weight*2.5*0.4, '元')項(xiàng)目實(shí)現(xiàn)結(jié)果:

以上代碼只能實(shí)現(xiàn)計(jì)算一位顧客需要支付的金額,每成功計(jì)算出一位顧客需要支付的金額后,程序會(huì)自動(dòng)結(jié)束。
基于此我們還可以將代碼進(jìn)行改進(jìn),以實(shí)現(xiàn)在計(jì)算完一位頤客需要支付的金額后會(huì)繼快計(jì)算下一位顧客 需要支付的金額。改進(jìn)后的代碼如下:
while True:
try:
weight = float(input('請(qǐng)輸入白菜的重量:'))
if weight < 2.0:
print("請(qǐng)付款:", weight*2.5*0.9, '元')
elif weight < 4.0:
print("請(qǐng)付款:", weight*2.5*0.8, '元')
elif weight < 10.0:
print("請(qǐng)付款:", weight*2.5*0.6, '元')2
else:
print("請(qǐng)付款:", weight*2.5*0.4, '元')
except:
print("輸入錯(cuò)誤,重新輸入,", end='')改進(jìn)后的項(xiàng)目實(shí)現(xiàn)結(jié)果:

??改進(jìn)后的代碼程序更滿足實(shí)際的使用需求,這是因?yàn)楦倪M(jìn)后的代碼將條件判斷語句加入了while循環(huán)語句的try代碼塊中,因此代碼會(huì)一直循環(huán)下去
總結(jié)
到此這篇關(guān)于Python流程控制之條件循環(huán)與異常處理的文章就介紹到這了,更多相關(guān)Python條件循環(huán)與異常處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python K-means實(shí)現(xiàn)簡(jiǎn)單圖像聚類的示例代碼
本文主要介紹了Python K-means實(shí)現(xiàn)簡(jiǎn)單圖像聚類的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
python爬蟲數(shù)據(jù)保存到mongoDB的實(shí)例方法
在本篇文章里小編給大家整理的是一篇關(guān)于python爬蟲數(shù)據(jù)保存到mongoDB的實(shí)例方法,有需要的朋友們可以參考下。2020-07-07
分析總結(jié)Python數(shù)據(jù)化運(yùn)營KMeans聚類
本文主要以 Python 使用 Keans 進(jìn)行聚類分析的簡(jiǎn)單舉例應(yīng)用介紹聚類分析,它是探索性數(shù)據(jù)挖掘的主要任務(wù),也是統(tǒng)計(jì)數(shù)據(jù)分析的常用技術(shù),用于許多領(lǐng)域2021-08-08
python kafka 多線程消費(fèi)者&手動(dòng)提交實(shí)例
今天小編就為大家分享一篇python kafka 多線程消費(fèi)者&手動(dòng)提交實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Python包管理工具uv常用場(chǎng)景使用超詳細(xì)指南
UV是由Astral團(tuán)隊(duì)開發(fā)的高性能?Python環(huán)境管理器,旨在統(tǒng)一替代pyenv、pip、venv、pip-tools、pipenv等工具,這篇文章主要介紹了Python包管理工具uv常用場(chǎng)景使用的相關(guān)資料,需要的朋友可以參考下2025-06-06
Python使用PEfile模塊實(shí)現(xiàn)分析PE文件
PeFile模塊是Python中一個(gè)強(qiáng)大的便攜式第三方PE格式分析工具,用于解析和處理Windows可執(zhí)行文件,本文主要就來講講如何使用PEfile模塊實(shí)現(xiàn)分析PE文件,需要的可以參考下2023-08-08
深入理解Python虛擬機(jī)中字典(dict)的實(shí)現(xiàn)原理及源碼剖析
這篇文章主要介紹了在?cpython?當(dāng)中字典的實(shí)現(xiàn)原理,在本篇文章當(dāng)中主要介紹在早期?python3?當(dāng)中的版本字典的實(shí)現(xiàn),現(xiàn)在的字典做了部分優(yōu)化,希望對(duì)大家有所幫助2023-03-03
關(guān)于torch中tensor數(shù)據(jù)類型的轉(zhuǎn)換
這篇文章主要介紹了關(guān)于torch中tensor數(shù)據(jù)類型的轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11

