# Python 程式設計入門筆記
這份筆記是成功大學「Python程式設計入門」的課程筆記整理,紀錄9/12-10/3之課程內容。
## Lecture1:變數、資料型別、運算符號
### 1. 變數(Variables):
在Python中,你可以使用變數來存儲不同類型的數據,包括整數、浮點數、字符串、布林值等。
### 2. 資料型別(Data Types):
Python 常見的資料型別有:
* **整數(int)**:用於表示整數值,例如 5, -10, 1000。
* **浮點數(float)**:用於表示帶有小數部分的數字,例如 3.14, -0.5, 2.0。
* **字符串(str)**:用於表示文本,例如 "Hello, World!", "Python"。
* **布林值(bool)**:用於表示真假,只有兩個值 True 和 False。
* **列表(list)**:用於存儲多個數據項的有序集合。
* **元組(tuple)**:與列表類似,但是不可變的(不可修改)。
* **字典(dict)**:用於存儲鍵-值對的集合,類似於映射。
* **集合(set)**:用於存儲唯一的元素,不允許重複。
這邊提出一個範例,不然大家可能對後面那幾個比較陌生。
```python=
ID1 = {"C12345678", "A123456789", "F12398765"} # ID is a set/不那麼在意順序的-->集合
ID2 = ["C12345678", "A123456789", "F12398765"] # ID is a list/很在意順序-->列表
ID3 = ("C12345678", "A123456789", "F12398765") # ID is a tuple/很在意順序的,但不想被改變的
```
如果將他們印出,會得到以下結果:
:::success
* **set**:F12398765, C12345678, A123456789
* **list**:C12345678, A123456789, F12398765
* **tuple**:C12345678, A123456789, F12398765
:::
這邊可以特別注意Python的印出順序,延續上面剛剛那個程式。
```python=
print(ID2[0]) # 從前面數來第1個 index=0 --> 1
print(ID2[1])
print(ID2[2])
# print(ID2[3]) # list index out of range
print(ID2[-1]) # 從後面數來第1個
print(ID2[-2])
print(ID2[-3])
print(ID2[-4]) # list index out of range
```
:::success
會印出:C12345678, A123456789, F12398765, F12398765, A123456789, C12345678
而最後一行因為超出範圍,會噴出**IndexError: list index out of range**
:::
:::danger
:warning: 可以發現數字必須從0開始數過來,而倒著數的話則是從-1開始。
:::
### 3. 運算符號(Operators):
* **數學運算符號**:用於執行數學運算,如加法 +、減法 -、乘法 、除法 /、取餘 % 等。
* **比較運算符號**:用於比較兩個值,如相等 ==、不等 !=、大於 >、小於 <、大於等於 >=、小於等於 <= 等。
* **邏輯運算符號**:用於執行邏輯操作,如且 and、或 or、非 not 等。
* **賦值運算符號**:用於將值賦予變數,如 =、+=、-=、=、/= 等。
* **位元運算符號**:用於執行位元級操作,如位元與 &、位元或 |、位元反轉 ~ 等。
### 4. 其他重點:
我覺得以下語法很容易搞混,因此需要特別筆記。
```python=
x = 10
y = 3
result_divide = x / y # 除法,結果是浮點數
result_floor_divide = x // y # 取整除法,結果是整數
result_modulus = x % y # 求餘數
```
以上程式碼會產生這樣的結果:
:::success
除法結果: 3.3333333333333335
取整除法結果: 3
求餘數結果: 1
:::
---
## Lecture2:條件語句、迴圈、函數
### 1. 條件語句(Conditional Statements):
Python中的條件語句允許你根據不同的條件來執行不同的代碼,其中最常見的條件語句是if語句。
* **if語句**:用於執行一個代碼塊,如果指定的條件為真(True)。
```python=
if condition:
# 在條件為真時執行的代碼
elif another_condition:
# 在另一個條件為真時執行的代碼
else:
# 如果上述條件都不滿足,則執行的代碼
```
:::danger
:warning: 不要忘記打冒號!
:::
### 2. 迴圈(Loops):
迴圈允許你多次執行相同的代碼,而不必重複編寫。Python中有兩種主要的迴圈:
* **for迴圈**:用於遍歷序列(如列表、元組、字符串等)中的元素。
```python=
for item in iterable:
# 對每個元素執行的代碼
```
* **while迴圈**:在滿足指定條件的情況下,重複執行代碼。
```python=
while condition:
# 在條件為真時重複執行的代碼
```
### 3. 函數(Functions):
函數是一個可以執行特定任務的代碼塊,並且可以多次調用以實現代碼的可重用性和組織性。
Python中定義函數的方式如下:
```python=
def function_name(parameters):
# 函數的代碼
return result
```
* **def**:定義函數的關鍵字。
* **function_name**:函數的名稱,你可以自己取名。
* **parameters**:函數的參數,用於接收外部傳遞的數據。
* **return**:可選的關鍵字,用於返回結果給調用函數的地方
---
## Lecture3:類別、物件導向以及Python模組介紹
### 1. 類別(Class):
* 類別是一個用於定義對象(物件)的藍圖或模板,它定義了對象的特性(屬性)和行為(方法)。
* 類別中的特性稱為**屬性**(**Attributes**),特性是對象的特徵或數據。
* 類別中的行為稱為**方法**(**Methods**),方法是對象可以執行的操作。
* 在Python中,你可以使用class關鍵字來定義類別。
```python=
class MyClass:
# 類別屬性
class_variable = 0
# 類別方法
def class_method(self):
print("This is a class method.")
# 初始化方法(建構函數)
def __init__(self, data):
# 實例屬性
self.instance_variable = data
# 實例方法
def instance_method(self):
print(f"This is an instance method with data: {self.instance_variable}")
```
### 2. 物件導向(Object-Oriented Programming,OOP):
* OOP是一種程式設計方法,它基於對象的概念,將數據和操作封裝到對象中,以實現模組化和可重用的程式碼。
* 在OOP中,對象是類別的實例,它包含**屬性**(**特性**)和**方法**(**行為**)。
* OOP的基本原則包括**封裝、繼承和多態性**。
```python=
# 創建類別的實例
obj1 = MyClass("Data for Object 1")
obj2 = MyClass("Data for Object 2")
# 調用實例方法
obj1.instance_method() # 輸出:"This is an instance method with data: Data for Object 1"
obj2.instance_method() # 輸出:"This is an instance method with data: Data for Object 2"
```
### 3. Python模組(Modules):
* 模組是Python中的一個文件,包含了Python代碼,讓你可以組織和重用代碼。
* 模組中可以包含**類別、函數、變數**等,以實現代碼的組織性和可重用性。
* Python標準庫包含許多內置模組,並且你也可以創建自己的自定義模組。
* 使用**import**關鍵字來引入模組,以便在你的程式中使用它。
```python=
# 創建類別的實例
# 引入Python內置的math模組
import math
# 使用math模組的函數
print(math.sqrt(25)) # 輸出:5.0
```
---
## Lecture4:輸入、輸出、除錯與例外處理
### 1. 輸入(Input):
* 在Python中,你可以使用**input()函式**來接收用戶的輸入。
* **input()函式**會等待用戶在命令行輸入一行文本,然後將輸入的文本作為字符串返回。
```python=
user_input = input("請輸入您的名字:")
print("您輸入的名字是:" + user_input)
```
以下是更多的程式範例:
```python=
#假設我輸入a=2,b=3
a = input("a=")
b = input("b=")
print(a+b) #會輸出23
print(type(a)) #會顯示a是str
print(int(a)+int(b)) #顯示出5
```
:::danger
:warning: 特別注意這裡輸入的資料型別式string,所以當我想要做數學運算時必須先轉換型別。
:::
### 2. 輸出(Output):
* Python使用**print()函式**來將數據輸出到控制台。
* 你可以使用**print()函式**來輸出文字、變數、計算結果等。
```python=
name = "Alice"
print("Hello, " + name + "!")
```
### 3. 開啟文件並撰寫或讀取:
要使用Python打開文件並寫入內容,你可以使用內置的**open()函式**。以下是一個基本的示例,演示如何打開文件、寫入內容並關閉文件:
#### **==寫入模式==**
```python=
# 打開文件以寫入模式
file_path = 'my_file.txt' # 替換成你想要的文件路徑和名稱
with open(file_path, 'w') as file:
# 使用文件物件寫入內容
file.write("這是要寫入的文本。\n")
file.write("這是另一行文本。\n")
# 文件將在離開with區塊後自動關閉
```
* 使用open()函式打開文件,並指定文件路徑和模式(**'w'表示寫入模式**)。
* 如果文件不存在,將創建一個新文件;如果文件已存在,則原有內容將**被清除**。
* 使用**with語句**,確保在退出with區塊後文件被自動關閉,這樣可以確保數據被寫入文件並且文件被正確關閉,不會出現資源泄漏。
* 使用**file.write()方法**將文本寫入文件。你可以使用多個file.write()語句寫入多行文本。
* 在文本中,**\n用於表示換行**,以便每一行的文本在文件中是獨立的行。
#### **==讀取模式==**
```python=
# 打開文件以讀取模式
file_path = 'my_file.txt' # 替換成你的文件路徑和名稱
with open(file_path, 'r') as file:
# 讀取整個文件內容
file_contents = file.read()
print(file_contents)
```
* 使用open()函式打開文件,並指定文件路徑和模式(**'r'表示讀取模式**)。這將允許你從文件中讀取內容。
* 使用with語句,確保在退出with區塊後文件被自動關閉,以避免資源洩漏。
* 使用**file.read()方法**讀取整個文件的內容,並將其存儲在**file_contents**變數中。
* 最後,你可以打印或處理file_contents變數中的文件內容。
* 如果你想逐行讀取文件,可以使用**file.readline()**或**for迴圈**進行逐行讀取。
### 4. 除錯(Debugging):
* 除錯是在程式碼中尋找和修復錯誤的過程。
* Python提供了許多工具和技術來幫助你除錯,包括使用print()語句輸出變數的值、使用IDE的除錯工具、使用pdb模組進行交互式除錯等。
```python=
def divide(a, b):
result = a / b
return result
num1 = 10
num2 = 0
try:
result = divide(num1, num2)
except ZeroDivisionError:
print("除以零錯誤")
else:
print("結果:", result)
```
### 5. 例外處理(Exception Handling):
* 例外處理是一種程式設計技術,用於處理和管理代碼執行中可能發生的錯誤(異常)情況。
* 在Python中,你可以使用**try**和**except**塊來捕獲和處理異常,以確保程序不會崩潰。
```python=
try:
# 可能出現異常的代碼
x = 1 / 0
except ZeroDivisionError:
print("除以零的錯誤")
except Exception as e:
print(type(e))
print(f"其他錯誤: {e}")
finally:
print("這段代碼總是會執行")
```
---
## Reference
[ChatGPT Python程式設計協助](https://chat.openai.com/share/7b814541-5cc1-4132-885c-279ca2cb7944)
國立成功大學「Python程式設計入門」上課內容 舒宇宸教授