# Python 課堂筆記 「Python程式設計入門」9/12-10/3課程內容筆記整理 ## 9/12 ### 變數和賦值的基本概念 在Python中,變數是用來存儲數據的名稱,賦值是將數據分配給變數的過程。 - 變數名稱: 1. 變數名稱可以包含字母、數字和底線,但必須以字母或底線開始。 2. 變數名稱區分大小寫,例如,"my_variable"和"My_Variable"被視為不同的變數。 3. Python有一些保留字(例如"if"、"while"等),不能用作變數名稱。 ```python= # 創建一個整數變數age並賦值為30 age = 21 # 使用變數age打印出年齡信息 print("我的年齡是: ", age) ``` - 變數的類型: Python是一種動態類型語言,變數的類型是根據賦給它們的值自動確定的。 不需要事先聲明變數的類型。 ```python= my_variable = 10 # my_variable是一個整數 my_variable = "Hello" # 現在my_variable是一個字符串 ``` - 多重賦值: Python支持多重賦值,可以同時為多個變數賦值。 ```python= x, y, z = 1, 2, 3 # 將1賦值給x,2賦值給y,3賦值給z ``` - 變數的重新賦值: 可以在程序運行中多次為變數賦值,變數的值會隨著每次賦值的改變而更新。 ```python= count = 0 count = count + 1 # 將count的值增加1,現在count為1 count = count + 1 # 再次增加1,現在count為2 ``` ### 資料型態: 1. 整數(int): 用於表示整數數值,例如:1、2、-3、100。 ```python= x = 5 ``` 2. 浮點數(float): 用於表示帶有小數部分的數值,例如:3.14、2.71828。 ```python= pi = 3.14159 ``` 3. 字符串(str): 用於表示文本數據,必須用單引號(')或雙引號(")括起來,例如:"Hello, World!"。 ```python= name = "Roger" ``` 4. 布林值(bool): 用於表示 True 或 False 的布林值,通常用於條件判斷。 ```python= is_student = True ``` 5. 列表(list): 用於儲存一組有序的元素,可以包含不同類型的元素。 ```python= fruits = ["pineapple", "guava", "passion fruit"] ``` 6. 元組(tuple): 類似於列表,但是不可變(immutable),一旦創建就不能更改。 ```python= coordinates = (3, 4) ``` 7. 字典(dictionary): 用於儲存鍵值對(key-value pairs),每個鍵關聯一個值。 ```python= person = {"name": "Roger", "age": 21} ``` 8. 集合(set): 用於儲存無序且不重複的元素集合。 ```python= unique_numbers = {1, 2, 3, 4, 5} ``` 9. NoneType: 表示一個特殊的空值,通常用於初始化變數或表示缺少值。 ```python= value = None ``` ### 運算符 - 數學運算符 - 加法運算符:+ - 減法運算符:- - 乘法運算符:* - 除法運算符:/ - 整數除法運算符:// - 餘數運算符:% - 指數運算符:** ```python= a = 10 b = 5 sum = a + b difference = a - b product = a * b division = a / b integer_division = a // b remainder = a % b exponentiation = a ** b ``` - 比較運算符 - 等於:== - 不等於:!= - 大於:> - 小於:< - 大於等於:>= - 小於等於:<= ```python= x = 5 y = 10 result1 = x == y result2 = x < y result3 = x >= y ``` - 邏輯運算符 - 且:and - 或:or - 非:not ```python= is_student = True is_registered = True can_access_content = is_student and is_registered should_show_ad = not is_registered ``` - 賦值運算符 - 賦值:= - 加法賦值:+= - 減法賦值:-= - 乘法賦值:*= - 除法賦值:/= - 位運算賦值:&=、|=、^=、<<=、>>= ```python= x = 10 x += 5 # x = x + 5 x -= 3 # x = x - 3 x *= 2 # x = x * 2 x /= 4 # x = x / 4 ``` ### 基本輸出 1. 使用print函數: print函數用於將文本或其他數據輸出到控制台。 ```python= print("Hello, World!") ``` 2. 格式化字符串輸出: 您可以使用字符串格式化來將變數的值插入到字符串中。 ```python= name = "Roger" age = 21 print(f"My name is {name} and I am {age} years old.") ``` ## 9/19 ### 條件語句 在Python中,使用if和else條件語句來實現條件控制。以下是if和else語句的基本結構: ```python= if 條件: # 如果條件為True,執行這裡的程式碼塊 else: # 如果條件為False,執行這裡的程式碼塊 ``` 是一個簡單的示例,說明如何使用if和else來控制程式的執行: ```python= age = 18 if age >= 18: print("您已成年。") else: print("您尚未成年。") ``` 也可以擴展這個概念,使用elif(else if的縮寫)來處理多個條件: ```python= score = 85 if score >= 90: grade = "A" elif score >= 80: grade = "B" elif score >= 70: grade = "C" else: grade = "D" print(f"您的成績等級是{grade}。") ``` ### 迴圈 在Python中,迴圈是用來重複執行程式碼塊的控制結構。 Python支持兩種主要的迴圈類型:for迴圈和while迴圈。 - 使用 for 迴圈: for迴圈通常用於遍歷可迭代對象(例如列表、元組、字典等),將其中的元素逐個提取出來處理。 ```python= # 使用 for 迴圈遍歷列表 fruits = ["apple", "pear", "pomelo"] for fruit in fruits: print(fruit) # 使用 for 迴圈遍歷範圍 for i in range(5): print(i) ``` - 使用 while 迴圈: while迴圈用於根據條件重複執行程式碼,只要條件為真,迴圈就會繼續執行。 ```python= # 使用 while 迴圈計數 count = 0 while count < 5: print(count) count += 1 # 使用 while 迴圈進行條件判斷 user_input = "" while user_input != "quit": user_input = input("輸入 'quit' 以退出:") print("您輸入了:" + user_input) ``` ### 函數 在Python中,函數是一段可重複使用的程式碼塊 它接受一些輸入(稱為參數或引數),執行特定的任務,並返回結果。 函數的使用可以提高程式碼的可讀性、模組化和可維護性。 1. 函數的定義: 在Python中,使用def關鍵字來定義函數。函數定義的基本結構如下: ```python= def function_name(parameters): # 函數內部的程式碼 # 可能包括計算、操作、條件語句、迴圈等 return result # 可選,用於返回值 ``` 2. 函數的呼叫: 要呼叫函數並使用它,只需使用函數名稱並提供必要的參數。 ```python= message = greet("Roger") print(message) # 輸出:Hello, Roger! ``` 3. 函數的參數: 函數可以有零個或多個參數,參數是函數接受的輸入值。您可以在函數定義中指定參數的名稱,然後在函數呼叫時提供相應的值。 ```python= def add(x, y): return x + y result = add(3, 5) # 傳遞參數3和5,返回結果8 ``` 4. 函數的返回值: 函數可以使用return語句返回一個或多個值。如果未指定return語句,則函數默認返回None。 ```python= def multiply(x, y): result = x * y return result product = multiply(4, 6) # 傳遞參數4和6,返回結果24 ``` ## 9/26 ### 物件導向(Object-Oriented Programming,OOP) 1. 類別和物件: 類別(Class)是物件的範本或藍圖,它定義了物件的屬性和方法。 物件(Object)是類別的實例,它包含了類別定義的屬性和方法的具體值。 2. 封裝: 封裝是將資料(屬性)和操作(方法)捆綁在一起的概念。類別將屬性和方法封裝在物件內部,隱藏了實現細節,只暴露了公共介面。 3. 繼承: 繼承是一種機制,允許一個類別繼承另一個類別的屬性和方法。子類別繼承了父類別的特性,並可以添加自己的特性或覆蓋父類別的方法。 4. 多型: 多型是一種概念,它允許不同類別的物件對同一方法作出不同的回應。多型提高了程式碼的靈活性和可擴展性。 下面是一個簡單的 Python 類別的範例: ```python= class Animal: def __init__(self, name): self.name = name def speak(self): pass class Dog(Animal): def speak(self): return f"{self.name} 汪!" class Cat(Animal): def speak(self): return f"{self.name} 喵!" # 創建物件 dog = Dog("Buddy") cat = Cat("Rex") # 呼叫方法 print(dog.speak()) # 輸出:Buddy 汪! print(cat.speak()) # 輸出:Rex 喵! ``` 我們定義了一個 Animal 類別,它具有一個 speak 方法。然後,我們創建了 Dog 和 Cat 類別作為 Animal 類別的子類別,每個子類別都覆蓋了 speak 方法以提供不同的實現。 ### 模組(Module) 模組是用來組織相關功能的程式碼檔案。 模組可以包含函數、變數、類別等,並允許您在不同的Python腳本中重複使用程式碼。 1. 創建和匯入模組: - 創建模組:創建一個Python檔案,其中包含函數、變數或類別等程式碼。 ```python= # mymodule.py def greet(name): return f"Hello, {name}!" ``` - 匯入模組:在另一個Python腳本中,您可以使用import語句來匯入模組。 ```python= import mymodule message = mymodule.greet("Roger") print(message) # 輸出:Hello, Roger! ``` 2. 使用別名匯入模組: 可以為匯入的模組指定別名以方便使用。 ```python= import mymodule as mm message = mm.greet("Roger") print(message) # 輸出:Hello, Roger! ``` 3. 匯入模組中的特定內容: 如果只需要模組中的特定函數、變數或類別,可以使用from關鍵字。 ```python= from mymodule import greet message = greet("Roger") print(message) # 輸出:Hello, Roger! ``` 4. Python標準庫: Python自帶了許多內建模組,可以直接使用它們,無需額外安裝。 例如,math模組提供了數學函數,random模組用於生成隨機數, datetime模組用於處理日期和時間等等。 ```python= import math result = math.sqrt(25) print(result) # 輸出:5.0 ``` 5. 自訂模組: 可以創建自己的模組來組織和重複使用程式碼。 將相關功能封裝到模組中有助於保持程式碼的清晰性和可維護性, 並使其在不同的專案中共享和重複使用。 ## 10/3 ### 讀取檔案 在Python中,可以使用內建的open函數來讀取文件。使用with語句可以確保在讀取後正確關閉檔案 ```python= # 開啟檔案 with open('檔案路徑', 'r') as file: # 讀取檔案內容 file_contents = file.read() # 處理檔案內容,例如列印它 print(file_contents) ``` 根據需求可以使用不同的檔案開啟模式,例如'r'(只讀,預設值)、'w'(寫入)、'a'(追加)等。 ### 讀取.xlsx檔 1. 使用 pandas pandas 是一個強大的資料處理庫,它可以輕鬆讀取和操作Excel文件。 如果沒有安裝,可以使用以下命令安裝它: ```python= pip install pandas ``` 然後,可以使用以下程式碼來讀取Excel文件: ```python= import pandas as pd # 讀取Excel文件 df = pd.read_excel('檔案路徑.xlsx') # 印出資料框(DataFrame) print(df) ``` 2. 使用 openpyxl openpyxl 是一個專門用於操作Excel文件的庫 如果只需要讀取Excel文件的內容而不涉及數據分析,這是一個好的選項。 如果沒有安裝,可以使用以下命令安裝它: ```python= pip install openpyxl ``` 然後可以使用以下程式碼來讀取Excel文件: ```python= import openpyxl # 開啟Excel文件 workbook = openpyxl.load_workbook('檔案路徑.xlsx') # 選擇一個工作表 sheet = workbook.active # 讀取數據 for row in sheet.iter_rows(values_only=True): print(row) ``` 如果需要進行數據分析和處理,pandas通常更方便。 如果只需要簡單地讀取數據,openpyxl可能更適合。 ### 匯出.csv檔 在Python中使用csv模組是一個常見的方法來輸出CSV檔 ```python= import csv # 定義要寫入CSV檔案的數據 data = [ ['姓名', '年齡', '城市'], ['123', 25, '台北'], ['456', 30, '新北'], ['789', 28, '桃園'] ] # 指定要寫入的CSV檔案的路徑 csv_file_path = '檔案路徑.csv' # 使用with語句打開CSV檔案並寫入數據 with open(csv_file_path, 'w', newline='', encoding='utf-8') as csv_file: # 創建CSV寫入器 csv_writer = csv.writer(csv_file) # 寫入數據行 for row in data: csv_writer.writerow(row) print(f'已成功將數據寫入到 {csv_file_path}') ``` 在上面的示例中,首先定義要寫入CSV檔案的數據,然後指定要寫入的CSV檔案的路徑(csv_file_path)。 接下來,使用with語句打開CSV檔案,並創建了一個CSV寫入器(csv_writer)。 最後,使用writerow()方法一行一行地將數據寫入CSV檔案。 ### 除錯與例外處理 1. 除錯(Debugging): - 使用print語句: 最簡單的除錯方法是在程式碼中插入print語句,輸出變數的值以及程式的執行流程。 通過觀察輸出,可以識別問題所在,找出錯誤。 - 使用調試器: Python提供了pdb,可以使用它來逐步執行程式碼並檢查變數的值。 在需要調試的地方,插入import pdb; pdb.set_trace(),然後運行程式,它將在那個點啟動。 - 使用整合開發環境(IDE): 許多Python IDE(例如PyCharm、Visual Studio Code等)提供強大的調試工具,可以逐步執行程式碼、查看變數、設定斷點等。 2. 例外處理(Exception Handling): - try...except區塊: 使用try...except語句區塊來處理潛在的例外情況。 在try區塊中編寫可能引發例外情況的程式碼,然後在except區塊中處理例外。 ```python= try: # 可能引發例外情況的程式碼 result = 10 / 0 except ZeroDivisionError: # 處理除以零錯誤的程式碼 print("除以零錯誤發生") ``` - 多個except區塊: 可以使用多個except區塊來處理不同類型的例外情況。 這允許依不同的例外類型採取不同的處理方式。 ```python= try: # 可能引發例外情況的程式碼 result = 10 / 0 except ZeroDivisionError: # 處理除以零錯誤的程式碼 print("除以零錯誤發生") except ValueError: # 處理值錯誤的程式碼 print("值錯誤發生") ``` - finally區塊: 可以使用finally區塊將try...except包裝起來,無論是否發生例外情況,都會在最後執行。 這對於需要在例外情況發生後進行清理操作(例如關閉檔案)非常有用。 ```python= try: # 可能引發例外情況的程式碼 file = open('file.txt', 'r') # ... except FileNotFoundError: # 處理檔案未找到例外情況的程式碼 print("檔案未找到") finally: # 在最後執行的程式碼,無論是否發生例外情況 file.close() ``` - 自訂例外情況: 可以建立自訂例外情況類別,以便更好處理應用程式特定例外情況。 ```python= class MyCustomError(Exception): def __init__(self, message): super().__init__(message) try: if some_condition: raise MyCustomError("自訂錯誤訊息") except MyCustomError as e: print(f"捕獲自訂例外情況:{e}") ``` 參考資料來源: ChatGPT 精通Python:運用簡單的套件進行現代運算(第二版) ISBN:9789865024864