# 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