# WEI
## W1-Git 版本控制系統
### git
1. 一套免費、開源、且有許多人使用的版本控制軟體
2. 可以在許多以git為技術和新的平台上與人交流,找到開源專案,觀摩他人的程式碼,加入他人的專案協作
### 版本控制系統version control system
1. **記錄各版本差異**
為軟體追加新功能時,會在許多檔案的不同地方修改程式碼,當所有都完成實在是有意義的版本差異,而在版本控制系統中稱呼更動為**commit**,代表更動中提交的程式碼
針對開發中專案,版本記錄系統會追蹤每次commit的程式碼差異、修改者、修改時間、修改原因
以**行**作為單位
2. **切換版本**
當新版程式具有錯誤,可快速還原舊版本,稱為**回滾(rollback)**
3. **利用分支開發不同功能**
**分支 (branch)和合併 (merge)**
可以在**主線master**的架構上加裝**分支**當完整開發完分支上新功能後在**合併**到分支上
### 使用GitHub
1. 點選 Start a project/repository
2. 輸入 repository 的名稱以及描述
3. 按下 Create repository
4. 將專案「推」上 GitHub
:::info
Date: 111/08/31
:::
## W2-python-基礎語法
### 縮排
>**用法**
利用tab鍵進行縮排,縮排多為四個空格,而最少要有一個
在同一個代碼塊中必須使用相同數量的空格
### 註釋
>用途
解釋Python的程式碼
使代碼更具可讀性
可防止測試中代碼被執行
>語法
以#開頭,PYTHON會將行的其餘部分呈現為註釋
可以放在行尾也可以獨立成行
#### 多行註釋
>語法
>* 可以在每一行插入一個#
>* 在前後加上多行字符串(三引號/"""),再將註釋放在其中,因為只要字符串沒有賦值給變量,在Python讀取後會忽略,所以可以作為多行註釋
### 數據類型
1. **Text Type:**
```str```
字符串
2. **Numeric Types:**
```int```
整數,可以是正數負數,不帶小數,長度
```float```
浮點數,可以是正數負數且包含一位或多位小數
也可以是帶有e的科學數字表示10的冪
```complex```
3. **Sequence Types:**
```list```
```tuple```
```range```
4. **Mapping Type:**
```dict```
5. **Set Types:**
```set```
```frozenset```
6. **Boolean Type:**
```bool```
7. **Binary Types:**
```bytes```
```bytearray```
```memoryview```
8. **None Type:**
```NoneType```
#### 設置數據類型
數據類型會在給變量賦值時設置
如
```python=
x = "Hello World"#str
x = 20 #int
x = 20.5 #float
x = 1j #complex
```
也可以指定數據類型
如
```python=
x = str("Hello World")#str
x = int(20) #int
x = float(20.5) #float
x = complex(1j) #complex
```
#### 數據類型轉換
可以使用類似設置數據類型的方法來改變數據類型
如
```python=
#example-1
x = float(20.5) #float
y = int(x) #int
#example-2
x = float(20.5) #float
y = int(x) #int
```
#### 獲取變量類型
>語法
```python=
type(Variable)
```
### 隨機取數
>語法
```python=
random.randrange(i, f)
#i-->起始值
#f-->最終值
```
### 變量(Variable)
>**用途**
存儲數據值的容器
#### 創建變量
>**語法**
1.
```python=
Variable =
```
2. 也可以透過強制轉換來指定變量的數據類型
```python=
Variable = str(3)
Variable = int(3)
Variable = float(3)
```
3. Python允許在一行中為多個變量賦值
```python=
Variable_1,Variable_2,Variable_3="1","2","3"
```
4. 也可以為多個變量分配相同的值
```python=
Variable_1=Vaiable_2=Variable_3="1"
```
5. 可以利用一個**集合**為變量賦值
```python=
collection = ["a","b"]
Variable_1,Variable_2 =collection
```
>>變量不須特別聲明為任何類型,也可在設置後修改
>>若是字串可以使用**單引號('')或雙引號("")**來
#### 全局變量/局部變量
* **全局變量**
在函數外部創建的變量,每個人都可以使用全局變量,無論是在函數的外部或內部
* **局部變量**
在函數內部所建立的變量,只能在函數內部使用
* 如果在函數內部創建與外部同名的變量,此變量是局部變量只能在函數內部使用,而全局變數將保持原樣、具原始值
* 如果要在函數內部建立全局變數可以使用```global```
>**命名規則**
1. 變量名必須**以大小寫字母或下劃線( _ )字符開頭,不能以數字開頭**
2. 變量名稱會**區分大小寫**,如X、x是兩個不同的變量
3. 變量名稱只能包含**大小寫字母、數字和下劃線( _ )**
4. 變量名稱不能使用**Python的保留字**,如False、True、break...
>>若是變量名多於一個單詞可以利用在單詞的第一個字大寫或下劃線隔開來增加變量的可讀性
### print
> **語法**
```python=
print("欲輸出之內容")
```
1. 若欲輸出多個變量,可以利用**逗號( , )** 隔開欲輸出之變量
```python=
print(x, y, z)
```
2. 也可以透過加號(+)來輸出多個變量
```python=
x ,y ="holle " ,"world"
print(x + y)
# 輸出-->holle world
```
而對於數字,加號(+)做運算符號使用
```python=
x ,y =2 ,1
print(x + y)
# 輸出-->3
```
但不可以用加號(+)來組合字串與數字,若欲組合字串與數字最好的方式為使用逗號(,)隔開
### str
1. 字符串用**單引號(')或雙引號(")** 括起來,
2. 故'holle'與"holle"是一樣的
3. 若是要設置**多行字符串要利用三個引號單雙**皆可
4. 字符串為陣列可以透過中括號[]來存取字符串的元素,第一個位置為0
5. 可以透過**len()** 的函數來存取字符串的長度
6. 檢查某個字符或短語有沒有在字符串中可以利用**in**,若是要檢查沒有,可以利用**not in**而輸出則為**True或False**
7. **Slicing Strings** 利用 **中括號[i:f]** 來表示想要獲取字符串的部分,包含i(起始)不包含f(結束),
* 如果從第一個字符(0)可以省略i
* 如果是到最後一個字符可以省略f
* 如果是 **加上負號(-)** ,代表從後面數回來。
8. 可以利用 **upper()** 的函數來讓字符串變成大寫的形式;而 **lower()** 可以讓字符串變成小寫的形式
9. **strip()** 可以將實際文本之前與之後的空格去除
**replace("原字符串", "替換字符串")** 可以替換字元
**split(分隔符)** 可以再指定的分隔符,拆分成兩個字符串
10. 可以用加號(+)來連結字符串
11. **String Format**
**format()** 可以透過函數來把括號內的內容替換到大括號中
可以透過逗號(,)來分隔並分配到相應的佔位符(大括號)中;也可以透過佔位符中加上數字來指定參數
12. **Escape Characters**
利用反斜線(\)來告訴程式碼後面的字元,單純當字元使用
>語法
```python=
#example-1
x = 'holle'
x = "holle"
#example-2
x = """hi
My name is Tom
Nice to meet you
"""
#example-4
x = "Hello, World!"
print(len(x))
# 輸出-->13
#example-7
x = "Hello, World!"
print(x[2:5])
print(x[:5])
print(x[2:])
# 輸出
# -->llo
# -->Holle
# -->llo, World!
#example-8
x = "Hello, World!"
print(x.upper())
print(x.lower())
# 輸出
# -->HELLO, WORLD!
# -->hello, world!
#example-9
x = " Hello, World! "
print(x.strip())
print(x.replace("H","J"))
print(x.split(","))
# 輸出
# -->Hello, World!
# --> Jello, World!
# -->[' Hello', ' World! ']
#example-10
a = "Hello"
b = "World"
print(a + " " + b)
# 輸出-->Hello World
#example-11
x = "My name is HaHa, and I am {}"
print(x.format("18"))
# 輸出-->My name is HaHa, and I am 18
x = "I have {1} brother and {2} sisters."
print(x.format("2","1"))
# 輸出-->I have 2 brothers and 1 sister.
#example-12
print("這個符號\"是雙引號")
```
### bool
**bool**
bool()函數允許您評估任何值,並給回傳
1. **True或False**
**False** 的形況會為
* **數字0**
* **None**
* **空的資料(如:{}、[])**
3. 可以創建函數且返回值為 **True** ,而內建函數中也有返回bool值的函數如```isinstance()```(用於判斷一個對象是否屬於某種入據類型)
### 運算符
#### 算術運算符(Arithmetic Operators)
| Operator | Name |
| -------- | -------- |
| + | Addition |
| - | Subtraction|
| * | Multiplication|
| / | Division |
| % | Modulus |
| ** | Exponentiatio(次方) |
| // | Floor division (忽略小數點以後所有的數) |
#### 賦值運算符(Assignment Operators)
| Operator | Example | Same As |
| -------- | -------- | -------- |
| = | x = 5 | x = 5 |
| += | x += 3 | x = x+3 |
| -= | x -= 3 | x = x-3 |
| *= | x *= 3 | x = x*3 |
| /= | x /= 3 | x = x/3 |
| %= | x %= 3 | x = x%3 |
| //= | x //= 3 | x = x//3 |
| **= | x **= 3 | x = x**3 |
| &= | x &= 3 | x = x&3 |
| ^= | x ^= 3 | x = x^3 |
| >>= | x >>= 3 | x = x>>3 |
| <<= | x <<= 3 | x = x<<3 |
#### 比較運算符(Comparison Operators)
| Operator | Name |
| -------- | -------- |
| == | Equal |
| != | Not equal |
| > | Greater than |
| < | Less than |
| >= | Greater than or equal to|
| <= | Less than or equal to|
#### 邏輯運算符(Logical Operators)
| Operator | Name |
| -------- | -------- |
| and | Returns True if both statements are true|
| or | Returns True if one of the statements is true|
| not | Reverse the result, returns False if the result is true
#### Identity Operators
| Operator | Description |
| -------- | ----------- |
| is | Returns True if both variables are the same object |
| is not | Returns True if both variables are not the same object |
#### Membership Operators
| Operator | Description |
| -------- | ----------- |
| in | Returns True if a sequence with the specified value is present in the object |
| not in | Returns True if a sequence with the specified value is not present in the object |
#### 運算符優先級
1. 算術運算符(括號內先算--> 先乘除後加減)
2. 比較運算符
3. 邏輯運算符(not--> and--> or)
### List
1. 將多個項目存儲在單個變量中,列表內的項目可以是任何數據類型,也可以在同一個列表內儲存
2. 創建列表的方法可以使用 **中括號([])** 或是使用 **list()** 構造函數
3. 列表是 Python 中用於存儲數據集合的 4 種內置數據類型之一(list /tuplee /set /dictionary)
4. 可以利用索引號來訪問列表內的數值(第一個項的索引號為0、第二個項所引號為1以此類推)
負索引則意味著從最後一個元素開始(-1表最後一項、-2表倒數第二項)
5. 利用 **中括號[i:f]** 來表示想要獲取列表的部分,包含i(起始)不包含f(結束),
* 如果從第一項(0)可以省略i
* 如果是到最後一項可以省略f
* 如果是 **加上負號(-)** ,代表從後面數回來。
6. 可以利用 **len()** 函數來確定列表的長度(有幾項)
>語法
```python=
#example-1
thislist = ["holle", "my", "friends"]
print(thislist)
# 輸出-->['holle', 'my', 'friends']
#example-2
thislist = list(("holle", "my", "friends"))
print(thislist)
# 輸出-->['holle', 'my', 'friends']
#example-4
thislist = ["holle", "my", "friends"]
print(thislist[1])
# 輸出-->my
#example-6
thislist = ["holle", "my", "friends"]
print(len(thislist))
# 輸出-->3
```
列表通常是有序的,故放置新的項目實心項目將被放置在列表的末端,但部分列表方法會改變順序。列表試可變的,意味著可以在創建列表後更改添加刪除列表中的項目。