# 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:資料}`