# Python
---
[TOC]
---
## \[1] 簡介
Python 是一種直譯式、物件導向的程式語言,擁有完整函式庫,社群上也有大量的第三方模組,有著易上手、應用廣泛的特性,是一個很適合初學者的語言。
與 Python 3 不相容的 Python 2 已確定不會再推出新版本,所以建議都從 Python 3 開始學,這篇講義也是以 Python 3 為主所編寫的。
---
## \[2] 整合開發環境
### Python IDLE
最簡單的直譯器,雖然功能不多但很方便,可以直接在 shell 輸入指令,可以拿來測試程式之類的。
### Jupyter Notebook
支援很多種直譯語言,很多網站上的討論也是以 Jupyter Notebook 的方式呈現,還有一些很實用的小功能,是很不錯的 IDE。
### Visual Studio
微軟開發的 IDE,功能很多且支援多種語言,用熟練後是個非常強大的工具。
---
## \[3] 輸入輸出
```python=
print(value, sep = "", end = "\n")
```
多個輸出值用逗號隔開。
sep 為輸出值的分隔字元,預設是空白。
end 為輸出結束所插入之字元,預設是換行字元。
```
變數名稱 = input()
```
輸入之資料預設為字串,( ) 內可寫入欲輸出變數。
---
## \[4] 變數
英文、數字、底線、中文組成,大小寫有別,建議使用英文與數字。
不可用系統保留字或內建函數。
不必先宣告,也不必設定資料型態。
---
## \[5] 資料型態轉換
### int(value)、float(value)、str(value)
可以強制轉換資料型態。
### type(value)
列出該變數的資料型態。
### eval(value)
將字串轉為 int 或 float,可以用作運算。
### None
有些人習慣先把變數先予以定義,尚未用到時就可以把變數的值設為 None,此時變數的資料型態為 NoneType。
---
## \[6] 關係運算子
| 大於 | 大於等於 | 小於 | 小於等於 | 等於 | 不等於 |
|:----:|:--------:|:----:|:--------:|:----:|:------:|
| > | >= | < | <= | == | != |
---
## \[7] 邏輯運算子
* and
* or
* not
---
## \[8] 條件判斷
if… elif… else,不可以寫 else if。
```python=
a = 5
if a: #變數 a 存在
print(a)
```
變數存在回傳 True。
---
## \[9] 字串
字串由字元組成,可以想成字元序列,可以取索引值、長度、切片。
| 逸出字元 | \\' 單引號 | \\'' 雙引號 | \\n換行 | \\\ 反斜線 |
| -------- | --------- | ---------- | ------ | --------- |
### 字串常見用法與函數

---
## \[10] 格式化輸出
```
print("字串" % (變數區))
```
| 字元 | 字串 | 整數 | 浮點數 |
|:----:|:----:|:----:|:------:|
| %c | %s | %d | %f |

在程式實例中,可以看出這樣無法控制浮點數的輸出。

%+5d 中的 5 代表留 5 格,正號表示如果數值資料是正的話會加上正號。
%3.2f 中的 3 代表總共留 3 格,2 代表小數部分留 2 格。
%-5d 中的 5 代表 5 格,負代表靠左對齊。
---
## \[11] format
```
print("字串內容".format(變數區))
```
字串中的變數一律用 { } 表示。

0, 1 可不編號,Python 會照順序對應。

第一行 > 表示向右對齊,總共留 5 格,小數留 2 格。
第二行 < 表示向左對齊,總共留 6 格,其餘用 x 補滿。
---
## \[12] 串列
串列是一系列元素組成的序列,而且裡面的元素可以是不同的資料型態。
元素放在中括號內,用逗號隔開。
索引值正方向從 0 開始,反方向從 -1 開始。
### 串列常見用法與函數

---
## \[13] 迴圈
### while 迴圈
通常運用在不知道迴圈執行次數的情況。
寫法同其他語言,記得加冒號與縮排。
### for 迴圈
```
for 變數 in 物件:
程式碼
```
通常運用在知道迴圈執行次數的情況。
物件可以是串列、字串、元組或字典。
```python=
ian = ["b", "a", "r", "o"]
for m in ian:
print(m)
```
for 迴圈第一次執行時,m 的內容是 "b",所以印出 b,接著執行第二次迴圈,這時 m 的內容是 "a",所以印出 a……就這樣跑到串列最後一個元素。
```
for 變數 in range(start, end, step):
程式碼
```
for 配合 range( ) 函數,start 預設是 0,step 預設是 +1。
### for… else 迴圈
當 for 迴圈中的所有 if 敘述條件為 False 時會執行 else。
```python=
num = int(input())
if num == 2:
print("是質數")
else:
for n in range(2, num):
if num % n == 0: #如果整除則跳出迴圈
print("不是質數")
break
else: #都沒有整除則是質數
print("是質數")
```
### break continue
跟其他語言一樣。
---
## \[14] 元組 Tuple
元組中的元素值和個數不可修改,除非重新定義該元組。
元素放在小括號內,用逗號隔開。
應用在串列上的用法與函數如果不會更改內容,就可以應用在元組上。

---
## \[15] 字典 Dictionary
字典的元素是用鍵(key)對應值(value)的方式配對儲存,鍵與值用冒號分開。
元素放在大括號內,用逗號隔開,元素排列並沒有固定順序。
key 只能是數字、字串、元組,且不可重複,value 可以是任何物件。
### 字典常見用法與函數

---
## \[16] 函數
自己設計一個函數,可以在主程式中使用,讓程式更精簡。
```
def 函數名稱(參數):
程式碼
return 回傳值
```
參數可以有多個,彼此用逗號隔開。
回傳值也可以有多個,彼此用逗號隔開。
```
def 函數名稱(參數, 參數1 = value):
```
參數可以被賦予預設值,有預設值的參數要放在右邊。
```python=
def icecream(icecream, *toppings):
print(icecream, "冰淇淋的配料有", end = "")
for topping in toppings:
print(topping, end = " ")
```

前面加上 ``*`` 的參數代表可以有多個參數傳入,要放在最右邊。
---
## \[17] 程式異常
捕捉程式異常,執行特殊程序,然後程式可以繼續執行。
```
try:
程式
except 異常物件:
程式
```
執行 try 下面程式,如果有異常,檢查是否是指定的異常物件,如果是就執行 except 下面程式。
### 常見的異常物件

---
###### tags: `ckefgisc23rd`