---
# System prepended metadata

title: Python 程式設計入門筆記
tags: [python]

---

# 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程式設計入門」上課內容 舒宇宸教授

