人工智能之編程基礎 Python 入門
第四章 條件循環與異常
@
前言
本章節緊接上一章內容繼續學習python的基本語法結構,主要學習條件語句、循環語句以及錯誤異常的處理方式。
條件語句
Python 中的條件語句用于根據不同的條件執行不同的代碼塊。主要的條件語句是 if、elif(else if 的縮寫)和 else。
基本語法
if 條件1:
# 條件1為真時執行的代碼
語句塊1
elif 條件2:
# 條件1為假,且條件2為真時執行的代碼
語句塊2
else:
# 所有前面的條件都為假時執行的代碼
語句塊3
關鍵點:
- ?冒號 (
:)?: 每個if,elif,else語句后面必須跟一個冒號。 - ?縮進?: 冒號后面的代碼塊必須縮進(通常使用 4 個空格)。Python 通過縮進來判斷哪些代碼屬于哪個條件分支。
- ?
elif和else是可選的?: 你可以只有if,也可以有if-else或if-elif-else鏈。 - ?條件求值?: 條件表達式的結果會被轉換為布爾值 (
True或False)。
示例
1. 簡單的 if 語句
age = 18
if age >= 18:
print("你已成年,可以投票!")
print("程序結束。") # 這行代碼總是會執行
輸出:
你已成年,可以投票!
程序結束。
2. if-else 語句
age = 16
if age >= 18:
print("你已成年,可以投票!")
else:
print("你還未成年,需要等待。")
print("程序結束。")
輸出:
你還未成年,需要等待。
程序結束。
3. if-elif-else 語句 (處理多個條件)
score = 85
if score >= 90:
grade = 'A'
elif score >= 80: # 注意:因為score<90才會到這里,所以這里只需檢查>=80
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'F'
print(f"你的成績等級是: {grade}")
輸出:
你的成績等級是: B
4. 嵌套的 if 語句
age = 20
has_license = True
if age >= 18:
if has_license:
print("你可以合法駕駛。")
else:
print("你年齡夠了,但需要先考駕照。")
else:
print("你還太小,不能駕駛。")
輸出:
你可以合法駕駛。
真值測試 (Truthiness)
在 Python 中,很多值在條件語句中會被自動轉換為布爾值:
- 被認為是
False的值 (falsy):FalseNone- 數值零:
0,0.0 - 空序列:
"",[],(),{} - 空集合:
set()
- 其他所有值都被認為是
True(truthy):True- 非零數值
- 非空字符串、列表、元組、字典等
示例:
my_list = [1, 2, 3]
if my_list: # 檢查列表是否非空,比 len(my_list) > 0 更Pythonic
print("列表不為空,包含元素:", my_list)
else:
print("列表為空。")
name = ""
if name: # 檢查字符串是否非空
print(f"你好, {name}!")
else:
print("名字不能為空。")
輸出:
列表不為空,包含元素: [1, 2, 3]
名字不能為空。
循環語句
Python 中的循環語句用于重復執行一段代碼,直到滿足某個條件為止。主要有兩種類型的循環:for 循環和 while 循環。
1. for 循環
for 循環用于遍歷序列(如列表、元組、字符串)或其他可迭代對象。
基本語法
for 變量 in 序列:
# 循環體
語句塊
示例
# 遍歷列表
fruits = ["蘋果", "香蕉", "橙子"]
for fruit in fruits:
print(fruit)
輸出:
蘋果
香蕉
橙子
# 遍歷字符串
word = "Python"
for letter in word:
print(letter)
輸出:
P
y
t
h
o
n
# 使用 range() 函數
for i in range(5): # range(5) 生成 0, 1, 2, 3, 4
print(i)
輸出:
0
1
2
3
4
# range(start, stop, step)
for i in range(1, 10, 2): # 從1開始,到10結束(不包含10),步長為2
print(i)
輸出:
1
3
5
7
9
2. while 循環
while 循環在條件為 True 時重復執行代碼塊。
基本語法
while 條件:
# 循環體
語句塊
# 更新條件,避免無限循環
示例
# 計數器循環
count = 0
while count < 5:
print(count)
count += 1 # 重要:更新條件變量,否則會無限循環
輸出:
0
1
2
3
4
# 用戶輸入循環
user_input = ""
while user_input.lower() != "退出":
user_input = input("請輸入命令(輸入'退出'結束): ")
print(f"你輸入了: {user_input}")
3. 循環控制語句
break: 立即退出循環。continue: 跳過當前迭代,繼續下一次迭代。
示例
# 使用 break
for i in range(10):
if i == 5:
break
print(i)
輸出:
0
1
2
3
4
# 使用 continue
for i in range(5):
if i == 2:
continue
print(i)
輸出:
0
1
3
4
4. else 子句
for 和 while 循環都可以有一個可選的 else 子句。當循環正常結束(沒有被 break 中斷)時,else 子句會執行。
示例
# for-else
for i in range(3):
print(i)
else:
print("循環正常結束")
輸出:
0
1
2
循環正常結束
# for-else with break
for i in range(5):
if i == 3:
break
print(i)
else:
print("循環正常結束") # 這行不會執行,因為循環被break了
print("循環結束")
輸出:
0
1
2
循環結束
5. 嵌套循環
循環內部可以包含另一個循環。
示例
# 打印乘法表
for i in range(1, 4):
for j in range(1, 4):
print(f"{i} * {j} = {i * j}", end=" ")
print() # 換行
輸出:
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3
2 * 1 = 2 2 * 2 = 4 2 * 3 = 6
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
6. 實用技巧
遍歷時獲取索引
fruits = ["蘋果", "香蕉", "橙子"]
for index, fruit in enumerate(fruits):
print(f"索引 {index}: {fruit}")
輸出:
索引 0: 蘋果
索引 1: 香蕉
索引 2: 橙子
同時遍歷多個序列
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f"{name} 今年 {age} 歲")
輸出:
Alice 今年 25 歲
Bob 今年 30 歲
Charlie 今年 35 歲
錯誤與異常
在 Python 編程中,錯誤主要分為兩類:語法錯誤(Syntax Errors) 和 ?異常(Exceptions)?。理解它們的區別和處理方法對于編寫健壯的程序至關重要。
1. 語法錯誤 (Syntax Errors)
語法錯誤發生在 Python 解釋器解析代碼時,發現代碼不符合 Python 的語法規則。這類錯誤會在程序運行前就被檢測出來,導致程序無法啟動。
常見的語法錯誤示例:
# 1. 缺少冒號
if x > 5
print("x is greater than 5")
# 2. 括號不匹配
print("Hello World"
# 3. 縮進錯誤
if x > 5:
print("x is greater than 5") # 缺少縮進
# 4. 引號不匹配
message = "Hello World'
語法錯誤的特點:
- 發生在程序運行之前
- Python 解釋器會指出錯誤的行號和類型
- 必須修正后程序才能運行
2. 異常 (Exceptions)
異常是在程序運行過程中發生的錯誤,此時代碼的語法是正確的,但在執行時遇到了問題(如除零、訪問不存在的文件等)。
常見的異常類型:
| 異常類型 | 描述 | 示例 |
|---|---|---|
ZeroDivisionError |
除以零 | 10 / 0 |
NameError |
變量名未定義 | print(undefined_variable) |
TypeError |
操作或函數應用于不適當類型的對象 | "hello" + 5 |
ValueError |
操作或函數接收到類型正確但值不合適的參數 | int("hello") |
IndexError |
序列中沒有此索引 | my_list[10](列表長度不足) |
KeyError |
字典中沒有此鍵 | my_dict["missing_key"] |
FileNotFoundError |
文件未找到 | open("nonexistent.txt") |
異常示例:
# ZeroDivisionError
print(10 / 0) # ZeroDivisionError: division by zero
# ValueError
int("hello") # ValueError: invalid literal for int() with base 10: 'hello'
# IndexError
my_list = [1, 2, 3]
print(my_list[5]) # IndexError: list index out of range
3. 異常處理
Python 提供了 try-except 語句來處理異常,讓程序在遇到錯誤時不會崩潰,而是執行預設的錯誤處理代碼。
基本語法:
try:
# 可能出現異常的代碼
可能出錯的代碼
except ExceptionType:
# 處理特定異常的代碼
錯誤處理代碼
except AnotherExceptionType:
# 處理另一種異常
錯誤處理代碼
else:
# 沒有異常時執行的代碼(可選)
無異常時的代碼
finally:
# 無論是否有異常都會執行的代碼(可選)
最終清理代碼
示例:
# 基本異常處理
try:
x = int(input("請輸入一個數字: "))
result = 10 / x
print(f"結果是: {result}")
except ValueError:
print("輸入的不是有效數字!")
except ZeroDivisionError:
print("不能除以零!")
except Exception as e:
print(f"發生了未預期的錯誤: {e}")
else:
print("計算成功完成!")
finally:
print("程序執行完畢。")
# 捕獲所有異常
try:
# 一些可能出錯的代碼
file = open("nonexistent.txt", "r")
except:
print("發生了某種錯誤!")
# 捕獲異常對象
try:
numbers = [1, 2, 3]
print(numbers[10])
except IndexError as e:
print(f"索引錯誤: {e}")
4. 拋出異常
可以使用 raise 語句手動拋出異常。
def validate_age(age):
if age < 0:
raise ValueError("年齡不能為負數")
if age > 150:
raise ValueError("年齡不能超過150")
return True
try:
validate_age(-5)
except ValueError as e:
print(f"驗證失敗: {e}")
5. 自定義異常
可以創建自定義異常類來處理特定的錯誤情況。
class CustomError(Exception):
"""自定義異常類"""
pass
class AgeError(Exception):
"""年齡相關的異常"""
def __init__(self, message):
self.message = message
super().__init__(self.message)
try:
raise AgeError("年齡不在有效范圍內")
except AgeError as e:
print(f"自定義異常: {e.message}")
6. 最佳實踐
- ?具體化異常處理?:盡量捕獲具體的異常類型,而不是使用通用的
except。 - ?避免空的 except 塊?:至少要記錄錯誤或采取適當的措施。
- ?使用 finally 進行清理?:在
finally塊中進行資源清理工作。 - ?不要忽略異常?:即使不處理,也要記錄下來。
# 好的做法
try:
file = open("data.txt", "r")
content = file.read()
except FileNotFoundError:
print("文件未找到")
except PermissionError:
print("沒有權限訪問文件")
finally:
if 'file' in locals() and not file.closed:
file.close()
總結
本文主要對python的條件循環以及錯誤語法的敘述與實踐,下一章節會學習python的基本數據結構,以及基本數據結構的用法,它們之間的相互轉換,和迭代生成。
資料關注
相關資料全部免費獲取:
歡迎關注公眾號:咚咚王

《Python編程:從入門到實踐》
《利用Python進行數據分析》
《算法導論中文第三版》
《概率論與數理統計(第四版) (盛驟) 》
《程序員的數學》
《線性代數應該這樣學第3版》
《微積分和數學分析引論》
《(西瓜書)周志華-機器學習》
《TensorFlow機器學習實戰指南》
《Sklearn與TensorFlow機器學習實用指南》
《模式識別(第四版)》
《深度學習 deep learning》伊恩·古德費洛著 花書
《Python深度學習第二版(中文版)【純文本】 (登封大數據 (Francois Choliet)) (Z-Library)》
《深入淺出神經網絡與深度學習+(邁克爾·尼爾森(Michael+Nielsen) 》
《自然語言處理綜論 第2版》
《Natural-Language-Processing-with-PyTorch》
《計算機視覺-算法與應用(中文版)》
《Learning OpenCV 4》
《AIGC:智能創作時代》杜雨+&+張孜銘
《AIGC原理與實踐:零基礎學大語言模型、擴散模型和多模態模型》
《從零構建大語言模型(中文版)》
《實戰AI大模型》
《AI 3.0》
posted on
浙公網安備 33010602011771號