---
# System prepended metadata

title: Python筆記

---

# Python筆記 
## Editor:桃園高中謝妤芊_110學年度第一學期自主學習
## Visual Studio Code
1.撰寫程式檔案: 附檔名用py
2.執行程式: python 檔案名稱
3."**#**": 程式中的註解，寫給人看的，用來做紀錄、說明
4."**cls**": 清除終端機所有程式
## 資料型態Data Type
資料為程式的基本單位。
> 不同型態做運算會出錯誤
> ex. '1' + 1 = TypeError
> 
### 數值型態
* 整數:int，是指不含小數點的數值
ex. `1, 123, 567`

* 浮點數:float，是指包含小數點的數值
ex. `1.0, 3.14, 3.16`
* 布林值:bool，此種資料型態只有兩個值:True及False
ex. `True, False`
### 字串型態
Python字串資料型態(str)是變數值以一對雙引號(「"」)或單引號(「'」)包起來

* 字串:str
ex. `"123", 'Hi', '小明說:"你好"'`
若字串需含有特殊字元如Tab、換行等，可在字串中使用「跳脫字元」
#### 跳脫字元  `\` :
以「\」為開頭，後面跟著一定格式的字元代表特定意義，讓加在後面的字元跳脫本身的意義而具有其他意義
       ex. 
        1.　`n`本身僅為字母，而`\n`則具有換行的功能
        2.　`\t` tab
        3.　`\\` 反斜線
        4.　`\"` 雙引號


  * 字串會對內部的字元編號(索引)，從0開始算起
   > ex. s="Hello" 請輸出第一個H
   >  print(s[0])


## 變數
變數為用來儲存資料的自訂名稱。
* 新增變數
`變數名稱 = 資料(變數值)`
#### 變數命名規則
* 變數名稱的第一個字母必須是大小寫字母、_、中文。
* 只能由大小寫字母、_、中文組成變數名稱。
* 英文字母大小寫視為不同變數名稱。
* 變數名稱不能與Python內建的表留字相同。
## 輸出與輸入 Output & Input
### 輸出 Output
 print命令能列印指定項目的內容，語法為
```py
print(項目1,項目2......, sep=分隔字元, end=結束字元)
```
* 項目1,項目2...... : print命令可以一次列印多個項目資料，項目之間以逗號「,」隔開。
* sep : 分隔字元，如果列印多個項目，項目之間以分隔符號區隔，預算值為一個空白字元(" ")
* end : 結束字元，列印完畢後自動加入的字元，預設值為換列字元("\n")，所以下次執行print命令會出現在下一列。
* sep & end
一般來說當輸出兩個以上的東西，預設以空格分開，並且會換行
例如: a = 123 , b = 456 , 請輸出`123456` , `123,456`
     ```py
    print(a, b)    #123 456 
    ```
    ```py
    print(a, b, sep='')    #123456 
    print(a, b, sep=',')   #123,456
    ```
    以此類推`end= `是一樣的用法，只是用在句尾
#### 參數格式化
print命令格式化字串，之後使用%接上一個tuple，語法為
```py
print (項目 % (參數列))
```
### 輸入 Input
```py
變數 = input([提示字串])
```
「提示字串」是輸出一段提示訊息，告知使用者如何輸入。輸入資料時，當使用者按下Enter 鍵後就視為輸入結束，input 命令會將使用者輸入的資料存入變數中。
* 使用input命令時，使用者輸入的資料型態為字串

## 判斷式
判斷式：根據關係運算或邏輯運算的條件式來判斷程式執行的流程，若條件式結果為True，就執行跳躍。
在判斷式內又包含判斷式稱為巢狀判斷式
### 單向判斷式(if...)
```py
if (條件式):
    程式區塊
```
### 雙向判斷式(if...else)
```py
if (條件式):
    程式區塊一
else:
    程式區塊二
```
```py
if (條件式一):
    程式區塊一
elif(條件式二):
    程式區塊二
elif(條件式三):
    程式區塊三
    ......
[else:]
    程式區塊else
```
* 注意「:」和「縮排」
## 迴圈
根據關係運算或邏輯運算條件式的結果為True 或False 來判斷，以決定是否重複執行指定的程式。
### range函式單一參數
```py
數列變數 = range(整數值)
```
例如:
```py
list1 = range(5)  #數列為0,1,2,3,4 
```

### range函式兩個參數
```py
數列變數 = range(起始值,終止值)
```
例如:
```py
list2 = range(3,8)  #數列為3,4,5,6,7
```

### range函式三個參數
```py
數列變數 = range(起始值,終止值,間隔值)
```
例如:
```py
list3 = range(3,8,2)  #數列為3,5,7數列每次增加2
```

### for迴圈
```py
for 變數 in 數列:
    程式區塊
```
例如:
```py
for n in range(3) #產生0,1,2的數列
print(n, end=",") #產生結果為:0,1,2,
```

### break語句
break語句是用來跳出一個循環語句，即停止執行一個循環語句，即是璇還條件尚未成為False或序列的項目還沒被完全跑完。
很重要的一點是，若跳出for或while循環，任何相應的循環else塊是不執行的。
例如:
```py
for i in range (1,11):
    if (i==6):
        break
    print (i, end=",") #執行結果1,2,3,4,5,
```
### continue語句
continue是來跳過當前循環塊中其餘的語句，繼續循環的下一次迭代。
例如:
```py
for i in range (1,11):
    if (i==6):
        continue
    print (i, end=",") #執行結果1,2,3,4,5,6,7,8,9,10,
```
### while迴圈
主要用於沒有固定次數的迴圈，此方式是先檢查條件式成立才執行程式區塊，宣告方式如下。

```py
while(條件式)
    程式區塊
```
while迴圈使用時要特別注意必須設定條件判斷的中止條件，以便停止迴圈的進行，免得陷入無限迴圈的窘境。


## 串列List
串列(又稱為清單或列表)，與其他語言的「陣列(Array)」相同，其功能與變數類似，是提供儲存資料的記憶體空間。
串列中各個元素資料型態可以相同，也可以不同。
### 串列宣告
#### 一維陣列宣告
```py
串列名稱 = [元素1,元素2,…]
```
#### 空串列
例如: ```pylist4=[]```
#### 多維串列宣告
例如:
```py
list5=[["dog","1234"],["cat","abcd"],["star","5678"]]
print(list5[1]) #["cat","abcd"]
print(list5[1][1]) #cat
```
#### 讀取串列元素
* 語法:
```py
串列名稱 [索引]
```
注意索引值是從0開始計數
#### 改變串列元素
```py
串列名稱[索引]=元素內容

```
#### 串列搜尋與計次
##### index()搜尋
* 語法:
```py
索引值 = 串列名稱.index(串列元素)
```
例如:
```py
list1 = ["A","B","C"]
n = list1.index("B") #n=1
m = list1.index("D") #ValueError: 'D' is not in list
```

##### count()計算次數
* 語法:
```py
次數=串列名稱.count(串列元素)
```
例如:
```py
list2 = ["A","B","C"]
n = list2.count("C") #n=1
m = list1.index("D") #m=0
```

#### 增加串列元素
##### append()方法
* 語法:
```py
串列名稱.append(元素值)
```
例如:在list1最後面增加一個串列，「加油」
```py
list1 = [1,2,3]
list1.append("加油") #list1=[1,2,3,'加油']
```

##### insert()方法
* 語法:
```py
串列名稱.insert(索引值,串列元素)
```
例如:
在list2串列索引2的位置插入一個串列元素「加油」
```py
list2 = [1,2,3]
list2.insert(2,"加油") #list1=[1,2,'加油',3]
```

#### 刪除串列元素
##### remove()方法 (當不確定所要刪除的元素索引時)
* 語法:
```py
串列名稱.remove(串列元素)
```
例如:
```py
刪除list1串列中「D」的串列元素
list1 = ["A","B","C","D"]
list1.remove("D") #list1=[A,B,C]
```

##### pop()方法 (i.e read then delete)
* 語法:
```py
串列名稱.pop([index])
```
例如:
```py
list2 = [1,2,3,4,5,6]
n = list.pop() #n=6, list2=[1,2,3,4,5]
n = list.pop(2) #n=3, list2=[1,2,4,5]
```

##### del刪除串列元素 (此為python的指令，非list method)
* del刪除串列單一元素的語法:
```py
del串列名稱[n1]
```
* del刪除串列指定範圍元素的語法:
```py
del串列名稱[n1:n2[:n3]]
```

例如:
```py
list1 = [1,2,3,4,5,6]
del list1[1] #list1=[1,3,4,5,6]
list2 = [1,2,3,4,5,6]
del list2[1:5:2] #刪除索引第1、3的串列元素
```
#### 串列排序
##### sort()由小到大排序
* 語法:
```py
串列名稱.sort()
```
例如:
```py將list串列由小到大排序
list1 = [3,2,1,5] #[3,2,1,5]
list1.sort() #list1 = [1,2,3,5]
```

##### reverse()反轉串列順序
* 語法:
```py
串列名稱.reverse()
```
例如:
```py將list2串列順序反轉
lsit1=[3,2,1,5] #[3,2,1,5]
list1.reverse() #[5,1,2,3]
```

## 元組Tuple
### 建立元組

* 語法:
```py
元組名稱 = (元素1,元素2,...)
``` 
例如:
```py
tuple1 = (1,2,3,4,5) #元素皆為整數
tuple2 = (1,"太陽",True) #包含不同資料型態元素
```
元組的使用方式與串列相同，但不能修改元素值，否則會產生錯誤
因此元組又稱為「不能修改的串列」


## 資料結構

### list:有順序、可動的列表
ex. `[3,4,5] , ["Hello","World"]`
### Tuple:有順序、不可動的列表
ex. `(3,4,5) , ("Hello","World")]`
### Set:集合
ex. `{1,2,3},{"Hello","World"}`
### Dictionary:字典
ex. `{apple:蘋果,data:資料}` 




