###### tags: `Python 入門`
Python 試試看
===
學習程式語言之前, 我們還是先了解一下甚麼是程式語言?然後再試著使用程式語言感受一下。
## 甚麼是程式語言?
『語言』最簡單的用途就是人與人之間溝通使用, 兩個人之間必須使用雙方都能聽懂的語言, 而『**程式語言 (programming language)**』則是人與『電腦』之間溝通的語言, 想要請電腦幫我們做事, 就必須仰賴程式語言:
```graphviz
digraph ProgrammingLanguage{
rankdir=LR;
node [shape = record];
people [label="人"]
computer [label="電腦"]
draw [label="繪圖"]
playMusic [label="播歌"]
others [label="...."]
download [label="下載"]
people->computer [label="程式語言"]
computer->draw [label="執行"]
computer->playMusic [label="執行"]
computer->others [label="執行"]
computer->download [label="執行"]
}
```
你可能會想『我每天都在用電腦, 也沒有用到程式語言啊?』沒錯, 絕大多數的電腦使用者所使用的都是其他人幫你準備好的『**程式 (program)**』, 例如編修照片用的 Photoshop、播歌用的 kkbox、或是上網用的 Google Chrome 瀏覽器等等, 就是其他人使用程式語言寫好給大家 (當然有的需要付費 :moneybag: ) 使用的程式:
```graphviz
digraph Application{
rankdir=LR;
node [shape = record];
programmer [label="程式設計師"]
computer [label="電腦"]
subgraph cluster_apps{
label ="一般使用者\n的應用程式";
ps [label="Photoshop"]
kkbox [label="kkbox"]
browser [label="Firefox"]
}
subgraph cluster_func {
label ="電腦端的\n對應功能";
draw [label="繪圖"]
playMusic [label="播歌"]
download [label="下載"]
}
programmer->ps[label="撰寫"]
programmer->kkbox
programmer->browser
ps->computer[label="指揮"]
kkbox->computer
browser->computer
computer->draw[label="執行"]
computer->playMusic
computer->download
}
```
如果遇到沒有適當的應用程式可以符合您的需求, 或是想要依照自己的方式執行某項功能時, 唯一的解決辦法就是自己**寫程式**了。舉個例子來說, 如果你有一份聯絡人的資料, 像是這樣:
```
柯大安, 台北, 23259850
鄭中立, 中壢, 4221460
盧豐原, 台中, 25224684
```
這份資料裡面第 3 欄的電話號碼都少了區域號碼, 如果你想要依據第 2 欄的城市為第 3 欄加上區域號碼, 由於這份資料只有 3 個人, 最簡單的方法當然就是自己打開檔案手動一一加上去。可是如果這份資料有 1000 個人、甚至 10000 個人呢?這就是自己寫程式可以幫上忙的地方了。以下就是實際的程式:
```python=
area_codes = {
"台北":"02",
"台中":"04",
"中壢":"03"
}
contacts_file = open("contacts.txt")
for contact in contacts_file:
name, area, tel = contact.split(",")
name = name.strip()
area = area.strip()
tel = area_codes[area] + "-" + tel.strip()
print(name, area, tel)
```
這段程式因為你還沒開始學 Python, 所以看不懂是正常的, 實際執行起來就像是這樣:
```
> py .\add_cdoe.py
柯大安 台北 02-23259850
鄭中立 中壢 03-4221460
盧豐原 台中 04-25224684
```
你可以看到第 3 欄已經自動加上了區碼了。如果沒有撰寫程式, 最慘的狀況就是一一手動加上區碼, 非常沒有效率。
世界上的程式語言百百種, 我們獨鐘 Python 的原因主要有以下三個:
- **使用人數多、使用領域廣**:這表示有問題時容易找到人幫忙, 而且不同領域、行業的人都在用, 不會因為要做不同的事情就得學習一種新的程式語言。
- **簡單易學**:這對於初學程式設計者尤其重要, 表示初期的學習門檻低, 否則就容易一學就想放棄。
- **支援功能齊全**:已經有世界各地的善心人士寫好各種延伸功能可以讓 Python 程式套用, 不用所有的事情都要自己從零做起, 成效高。
## 牛刀小試
試用 Python 最簡單的方法, 就是在**交談模式**下把 Python 當成便利的計算機, 舉例來說, 如果你去逛書店, 在一櫃打 7 折的書中挑了 100 元與 200 元的書各一本, 另一櫃打 8 折的書中挑了 200 元與 300 元的書各一本, 若使用如下的傳統計算機:

就要先按 `100` `+` `200` `×` `0.7` 把第一櫃的書計算完畢後按 `M+` 記錄下來, 再按 `200` `+` `300` `×` `0.8` 算出第二櫃的書價後按 `+` `MR` 把剛剛記錄下來的第一櫃的書價加進來, 不但很麻煩, 也要自己記得計算過程, 還得弄清楚計算機上這些 `M+` `MR` `MC` 等等按鈕的功用。如果使用 Python, 只要一行**運算式**就可以了, 如下:
````Python
>>> (100 + 200) * 0.7 + (200 + 300) * 0.8
610.0
````
除了鍵盤無法簡單打出 `×`, 因此 Python 使用 `*` 表示乘法以外, 就跟一般寫**數學算式**的方式一樣, 非常簡單。在交談模式下, Python 會把你鍵入的那一列運算式的計算結果顯示出來, 因此會看到 610.0。
:::info
:memo: 在鍵入運算式時, 可以像是上例加入適當的空白區隔個別的運算, 不加空白也沒有關係, 都可以正確運算。
:::
### 運算式 (expression)
你可以自己試看看不同的計算, Python 也提供了計算次方的功能, 像是 `10 的 2 次方`:
````Python
>>> 10 ** 2
100
````
上例中 `**` 就是次方的意思。如果想取得除法的商數及餘數, 可以這樣:
````Python
>>> 30 / 20 # 除法
1.5
>>> 30 % 20 # 取得除法的餘數
10
>>> 30 // 20 # 取得除法的商數
1
````
上面的示範有幾個基本知識需要說明:
1. `#` 字元代表註解 (comment), 從 `#` 開始到該列結尾的內容 Python 會當成沒看到, 完全沒作用。這些註解是寫給人看的, 說明程式碼的內容, 有助於理解程式碼。
2. 運算式中的 `+`、`*`、`/`、`//`、`%` 等稱為『**運算器(operator)**』, 代表各種計算方式。
3. 運算式中提供給運算器計算的資料稱為『**運算元 (operand)**』, 前面範例中出現的運算器都需要 2 個運算元, 例如 `*` 計算的是 2 個運算元相乘的結果。
瞭解之後, 就可以來看看 Python 中這些運算元 (資料) 的奇特之處。
::: info
:memo: 有些教材會將 operator 稱為『**運算子**』, 不過我認為『子』字實在很難理解是什麼意思?所以我採取『運算器』的說法, 表示是用來進行特定運算的機制。
:::
::: info
:warning: 如同數學運算有先乘除後加減等優先順序的規則, Python 中的運算器也有自己的一套優先順序規則, 不過為了避免出錯, 我強烈建議加上適當的小括號, 明確表明運算式中個別運算的先後順序, 也讓閱讀的人容易看懂。
:::
::: info
:memo: 如果想知道 Python 提供有哪些運算, 可以查看 [Python 線上文件](https://docs.python.org/3/library/stdtypes.html)。
:::