---
# System prepended metadata

title: Programming Refresher
tags: [普渡計畫]

---

# 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)
由於技術等原因、無法直接在代碼中寫出所要的字元時採用的，以多個字元的有序組合來表示原本需要的字元的手段

![](https://i.imgur.com/JuumEf2.png)

```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']
```


