# Programming Refresher
###### tags: `普渡計畫`
## 編譯器 v.s. 直譯器
#### [參考資料-菜鳥救星講程式](https://rookiesavior.net/2020/09/09/engineer-what-are-compilers-and-interpreters/)
### 編譯器(Compiler):
是寫完程式碼後,最後全部一起翻譯,翻譯完後才能執行。
e.g. C、C++、C#、Java
編譯好後會多一個類似.class的檔案,這個就是機器語言,最後才能去執行程式。所以以java來講寫好程式後最少會有兩個檔案(你寫的程式碼.java檔、跟編譯過的.class檔)。
### 直譯器(Intepreter):
是一行一行直接翻譯執行。每翻譯一行程式敘述就立刻執行,然後再翻譯下一行,再執行,所以直譯器可即時翻譯、執行。
e.g. PHP、Ruby、Python
我們在執行程式時,你馬上就看到執行結果,並不沒有編譯,而是直譯器本身是即時翻譯,所以你不需要再特別的去編譯它。
### 速度
編譯器它是整篇一起翻譯後再執行、而直譯器是邊翻譯邊執行所以會比編譯器來的慢。編譯程式碼,是工程師最基礎的功夫,這邊也建議剛開始學程式語言的初學者一定要學會編譯程式後,再去挑選比較好的編輯器,地基打得穩,才有辦法走更遠的路。
## Data Type
### Scalar(純量)
1. Integer
2. Float
3. Boolean
### Aggregate Types
1. Complex
2. String
3. List
4. Dictionaries
5. Tuple
6. File
7. Set
## 進位轉換
### 認識進位
```python=
a = 0x10
b = 0o10
c = 0b10
d = 0xA0F
print([a,b,c,d])
>>>[16, 8, 2, 2575]
```
hexadecimal(16進位)
octal(8進位)
binary(2進位)
### 如何轉換
```python=
x = bin(2)
y = oct(8)
z = hex(16)
print([x,y,z])
>>>['0b10', '0o10', '0x10']
```
## 變數(Variable)
### 變數的特性
1. 變數是可以改變的
2. 變數是用符號來表示儲存的位置
3. 在Python中不用宣告變數
### 變數宣告
1. Python中不用特別宣告變數的特性
2. 變數可以是一種物件
3. 像是Function, Classes, Modules都是物件
## String 的特性
1. 可以透過"+"串接String(Concatenation)
```python=
x = 'hello'
y = 'yo'
print(x+y)
>>>helloyo
```
2. 可以透過*來進行重複(Repition)
```python=
y = "yoyoyo"
print(y*3)
>>>yoyoyoyoyoyoyoyoyo
```
3. 指定位置(indexing)
```python=
y = "Python"
print(y[1])
>>>y
```
4. 分割(slice)
```python=
y = "Python"
print(y[2:4])
>>>th
```
```python=
y = "Python"
print(len(y))
>>>6
```
5. 字串是不可變的(Immutable String),如果改變會產生錯誤
```python=
y = "Python"
y[-1]=0
print(y)
>>>y[-1]=0
TypeError: 'str' object does not support item assignment
```
6. 轉義序列 (Escape sequence)
由於技術等原因、無法直接在代碼中寫出所要的字元時採用的,以多個字元的有序組合來表示原本需要的字元的手段

```python=
print('"Isn\'t." she said.')
>>> "Isn't." she said.
print('First line.\nSecond line.')
>>> First line.
>>> Second line.
```
如果不想讓"\"被解釋成轉義序列,可以在引號前加一個r,就可以避免這個情況發生
```python=
print("C:\some\name")
>>> C:\some
>>> ame
print(r"C:\some\name")
>>> C:\some\name
```
7. lower() & upper()
把字串轉成大寫或小寫
```python=
a="ABC"
print(a.lower())
>>>abc
```
```python=
a="abc"
print(a.upper())
>>>ABC
```
8. 判別開頭的方法 startwith()
這個Method是Capital Sensitive,會回傳Boolean值
```python=
a = "Hello World"
print(a.startswith("h"))
>>> false
```
9. 替換字串 replace()
```python=
a = "Hello World"
print(a.replace("H", "Y"))
>>>Yello World
```
10. 另一種切割(Slice)工具,split()
```python=
a = "Hello World"
print(a.split(" "))
>>> ['Hello', 'World']
```