動態

詳情 返回 返回

人工智能之編程基礎 Python 入門:第四章 條件循環與異常 - 動態 詳情

人工智能之編程基礎 Python 入門

第四章 條件循環與異常


前言

本章節緊接上一章內容繼續學習python的基本語法結構,主要學習條件語句、循環語句以及錯誤異常的處理方式。


條件語句

Python 中的條件語句用於根據不同的條件執行不同的代碼塊。主要的條件語句是 ifelif(else if 的縮寫)和 else

基本語法

if 條件1:
    # 條件1為真時執行的代碼
    語句塊1
elif 條件2:
    # 條件1為假,且條件2為真時執行的代碼
    語句塊2
else:
    # 所有前面的條件都為假時執行的代碼
    語句塊3

關鍵點:

  1. 冒號 (:)​: 每個 if, elif, else 語句後面必須跟一個冒號。
  2. 縮進​: 冒號後面的代碼塊必須縮進(通常使用 4 個空格)。Python 通過縮進來判斷哪些代碼屬於哪個條件分支。
  3. elifelse 是可選的​: 你可以只有 if,也可以有 if-elseif-elif-else 鏈。
  4. 條件求值​: 條件表達式的結果會被轉換為布爾值 (TrueFalse)。

示例

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):

    • False
    • None
    • 數值零: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 子句

forwhile 循環都可以有一個可選的 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. 最佳實踐

  1. 具體化異常處理​:儘量捕獲具體的異常類型,而不是使用通用的 except
  2. 避免空的 except 塊​:至少要記錄錯誤或採取適當的措施。
  3. 使用 finally 進行清理​:在 finally 塊中進行資源清理工作。
  4. 不要忽略異常​:即使不處理,也要記錄下來。
# 好的做法
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的基本數據結構,以及基本數據結構的用法,它們之間的相互轉換,和迭代生成。

資料關注

相關資料全部免費獲取:
歡迎關注公眾號:咚咚王

藝術二維碼.png

《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》

user avatar zhidechaomian_detxs7 頭像 u_17353607 頭像 u_17397181 頭像 u_15505879 頭像 u_17467352 頭像 itwhat 頭像 jianweilai 頭像 nocobase 頭像 codexiaosheng 頭像 haijun_5e7e16c909f52 頭像 feibendemaojin 頭像 iex365 頭像
點贊 34 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.