# 開始執行Python

{% hint style="danger" %}
雖然在這裡介紹非常多種方法，但是同學們只要選擇其中一種方法就可以了，不一定要每一種方法都嘗試喔。
{% endhint %}

## Google Colab

目前線上執行Python以及機器學習模組最強的線上工具：

<https://colab.research.google.com/notebooks/welcome.ipynb>

## CodingBar

我們會在課堂上使用的線上學習及測驗系統：

<https://app.codingbar.ai/>

## 在瀏覽器中執行Python

現在有愈來愈多的程式語言可以在瀏覽器上直接執行了。此種方式最大的優點就是完全不需要安裝任何的應用程式或設置任何的環境，所有的設定都在瀏覽器中所提供的環境幫我們設定好了。因此，只要連上正確的網址，就可以馬上開始編寫你的Python程式。此種方式，我們暫且把它們稱作online Python editor。

在online Python editor中最常被使用的是repl.it：

{% embed url="<https://repl.it/languages/python3>" %}

進入repl.it之後，直接選擇要編輯的程式語言（它們支援的程式語言還真不少），在選用了Python之後，即可看到如下所示的介面：

![](/files/-LNcSJZ9gPX0q_WOB3-9)

在畫面的最左邊是 檔案目錄，中間是編寫左側開啟之檔案的程式之編輯器，在右邊則是Python Shell，也是中間程式執行結果輸出的地方。

在最右側可以直接一行一行地輸入想要執行的程式碼，每次輸入一行再按下Enter之後，該行指令的內容就會立刻被執行並把結果顯示出來。此種執行的方式非常適合於用來測試一些指令或是運算式的用法。

如果需要編寫比較長一些的程式，即可在中間的編輯器編寫，編寫完畢之後再按下上方的「Run」按鈕加以執行，執行的結果會被輸出在最右側。

如果想要每一次進入時可以接續上一次編輯的狀態，可以在這個網站中註冊帳號，以後每次只要登入就可以儲存每一次工作階段的內容了。

另外一個由國人自行開發的環境為Taiwan Python School的程式框：

{% embed url="<https://www.taiwancodeschool.com/writecode>" %}

在畫面的左側提供程式編輯的環境，右側提供了IPython Shell介面，也非常方便用來學習Python語言的基礎語法。

還有其它非常多的Python線上編輯器資源，有興趣的同學們可以自己利用Google去搜尋一下，使用「online python editor」這個關鍵字就可以找到很多了！

## 在自己的電腦中安裝Python

由於Python最基本的就是一個翻譯的程式，所以只要前往前面所提到的python.org網站中下載Python直譯器來安裝，不管你使用的是什麼作業系統，就都可以在你的電腦中執行Python程式了。不過，不同的作業系統仍然有一些小小的差異。

Windows作業系統本身並沒有內建Python，所以想要在自己的電腦中執行Python程式語言，下載Python直譯器進行安裝是唯一的一個方法。然而在MacOS以及Linux作業系統中，Python已經是內建的程式語言了，所以基本上不用安裝也可以編寫Python程式。但是MacOS只有Python 2.x，Linux作業系統則是Python 2以及Python 3都有。

{% hint style="info" %}
Linux作業系統中，在終端機的環境下，輸入python會執行到Python 2的直譯器，輸入python3才會執行到Python 3
{% endhint %}

{% hint style="info" %}
為什麼要區分Python 2還是Python 3？這是一個歷史的因素。在大部份的程式語言中，只要追加了新的功能都會考慮到和之前版本的相容性，但是Python在發展的過程中卻沒有遵循這個原則，在一次大改版中，它們發展了Python 3這個版本，有一些特性和之前Python 2時是不相容的，但是因為很多的套件基於Python 2開發的，使得它們就被分成了兩個不同的發展分支，各自有各自的發行版號。有很長一段時間，有一些套件一直死守在Python 2的版本中，不過現在已經大多轉投Python 3的懷抱了。因此，現在如果再要學習Python，Python 2可以完全不用加以考慮了。
{% endhint %}

如果只是做簡單的程式設計練習，只要使用簡單的程式碼編輯器，再加上Python Shell就很方便了。因此在之前上課時都會先讓同學們從python.org中標準下載檔案安裝開始教起。不過由於現在學習Python都會使用到許多科學套件，同時也會使用比較好用的IPython Shell以及Jupyter notebook，因此，如果同學們打算在自己的電腦中安裝Python開發環境的話，請直接前往Anaconda，安裝Anaconda套件，並選擇Python 3的版本。下載的網址如下：

{% embed url="<https://www.anaconda.com/download>" %}

進入該網址之後，請選擇適合自己電腦的版本，下載安裝即可。安裝完畢之後，安裝程式自動會幫我們建立好一個Python的開發環境，並提供許多現有好用的套件直接可以透過import引入應用，此外，還有一個程式碼編輯器Spyder，以及Jupyter IPython以及notebook可以使用。

### MacOS

以MacOS為例，在安裝完畢之後，可以執行Anaconda Navigator，就可以看到如下所示的，所有可用的應用程式功能：

![](/files/-LNdl1LTK9QI6X0Q8NJH)

想要執行哪一項功能，直接使用滑鼠點選該功能的圖示即可。在這幾個工具中，jupyter notebook是以瀏覽器為基礎的交談式介面進階程式編輯及執行環境，是非常多人使用的程式編寫環境，至於spyder則是一個整合式的程式開發環境，如果想要編想大型一點的程式專案，可以考慮使用它。

此外，在MacOS中，直接進入終端機介面中，執行ipython也可以進入文字式的IPython Shell，當然，直接鍵入python，也可以進入傳統的Python Shell介面。

### Windows 10

同樣的方式在Windows 10中完成的了安裝之後，可以在程式集中找到Anaconda Navigator，如下圖所示：

![](/files/-LNe_PIDM846St1BQdMn)

然而，其實大部份可用的程式都在程式集中就可以直接點選執行，因此在大部份的情形之下其實是不需要執行Anacaonda Navigator了。

一般來說，如果需要執行Python Shell，會選擇執行Anaconda Prompt，它會進入Windows 10的命令提示字元，開啟一個可以執行Python Shell的環境，如下所示：

![](/files/-LNeaAWDOFDMVvDvMZ_G)

在上面這個命令提示字元中，還是要輸入python，才能夠進入Python Shell，如下所示：

![](/files/-LNeaJZ68EnxLvh45umS)

如果打算執行的是IPython Shell的話，則只要輸入ipython就可以了，如下所示：

![](/files/-LNeaTBdky6Wk10LHL_-)

那麼，如果要進入jupyter notebook呢？當然也是輸入jupyter notebook，輸入之後，此命令提示字元就會出現一個執行了Web 伺服器的訊息畫面，同時會再開啟瀏覽器，連線到localhost:8888，連線到jupyter notebook的執行介面。命令提示字元的介面如下：

![](/files/-LNeb5VPxXuc_jiCpqZE)

瀏覽器的介面如下所示：

![](/files/-LNebBRvv-bmNFWhe_3t)

## 在個人電腦中執行Python的幾種方式

### Python Shell

傳統上執行Python程式腳本的方式，幾乎在所有的作業系統中都適用。一般來說，只要在命令提示字元底下輸入python再按下Enter，就會出現如下所示的文字訊息以及Python Shell的提示字元：

```
(base) C:\Users\minhuang>python
Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
```

{% hint style="info" %}
在MacOS以及Linux作業系統中是終端機（Terminal）
{% endhint %}

在「>>>」的符號後面就是Python系統提示我們可以輸入程式指令的地方。我們可以輸入簡單的運算式如下：

```
(base) C:\Users\minhuang>python
Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> chi = 80
>>> eng = 90
>>> math = 65
>>> total = chi + eng + math
>>> average = total / 3
>>> print("Total score is {}, average score is {}".format(total, average))
Total scores is 235, average score is 78.33333333333333
>>>
```

在上述的區塊中，所有在符號「>>>」之後的指令，都是由我們輸入的。也上述的環境中也可以輸入比較長一點的程式，例如for迴圈的使用：

```
(base) C:\Users\minhuang>python
Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
>>> for i in range(10):
...     print(random.randint(1, 6))
...
6
5
6
5
5
1
1
5
6
6
>>>
```

在上述的程式中，我們設計了一個小小的程式，用來顯示10次1到6的隨機亂數之輸出結果。其中「...」符號後面也是由我們輸入的內容，但是要留意的是，在Python程式語言的規定中，使用縮排的程度來決定哪些程式敘述是屬於同一個區塊的。為了表示print那行敘述是屬於for這個區塊，我們用了4個空白來做為縮排。上述的程式中，因為for迴圈中只有一行print敘述，因此在第7行的地方只要直接按下Enter，Python Shell就知道程式已經前入完畢，可以開始執行了。

{% hint style="warning" %}
縮排要使用幾格其實沒有嚴格的規定，不過，一般如果使用空格的話，以2格或4格居多，也有使用Tab按鍵的。不過，不管使用的是哪一種，整個程式中一定要統一，也就是如果你使用2格做為一層縮排的話，整個程式的第一層縮排就都要是2格，如果是4格的話，就表示是有2層的縮排，依此類推。如果縮排不一致的話，程式在翻譯的時候就會出現錯誤。
{% endhint %}

在Python Shell中，使用exit()可以離開Shell回到命令提示字元。

### IPython Shell

IPython Shell可以說是進階版的Python Shell，如果你的Python環境不是透過Anaconda安裝的，那麼在執行IPython Shell之前可能還要先利用pip套裝模組管理指令先把IPython安裝到Python環境中才行：

```
pip install ipython
```

要執行IPython Shell，也是在命令提示字元中執行ipython就可以了。執行的結果如下所示：

```
(base) C:\Users\minhuang>ipython
Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:
```

和Python Shell不一樣的地方在於，IPython的提示符號不再是3個小於符號，而是以In\[1]:的型式出現，它把每一個輸入的指令加以編號，方便日後的重新運用。像是之前輸入運算式的作業，在IPython Shell中看起來如下所示：

```
(base) C:\Users\minhuang>ipython
Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: chi = 90

In [2]: eng = 80

In [3]: math = 65

In [4]: total = chi + eng + math

In [5]: average = total / 3

In [6]: print("Total score is {}, average score is {}".format(total, average))
Total score is 235, average score is 78.33333333333333

In [7]:
```

除了編輯的內容文字都變成了彩色的之外，也多了許多文字的編輯功能（例如協助括號配對等等），讓我們在輸入錯誤指令之後可以很方便地進行編修。此外，也多了一些以%符號開頭的魔術指令，讓程式設計人員可以在不用離開IPython Shell的情況下就進行作業系統層次的操作（如檔案更名以及刪除、列出目前目錄下的檔案名稱等等）。magic command在以下的網頁中有相當詳細的說明：

{% embed url="<https://ipython.readthedocs.io/en/stable/interactive/magics.html>" %}

離開IPython Shell的指令為「exit」，不需要加上後面的括號。

### jupyter notebook

其實對許多人來說，使用jupyter notebook來執行Python是最方便的方式，它使用的是瀏覽器的介面，非常容易對於程式內容進行編輯，因此所有曾經出現過的輸出、編寫過的程式都被留在瀏覽器的頁面上，直到我們把它動手刪除為止。而且，所有的內容，都可以直接照原樣存成.pynb檔案，下次還可以把它載入繼續編修。

同學們可以在程式集中找到「Jupyter Notebook」執行之，但是建議你先進入Anaconda Prompt的命令提示字元，切換到你想要使用的目錄（資料夾）中，再以jupyter notebook命令進入Jupyter Notebook，這樣就可以在自訂的目錄中始編寫你的程式碼了。

例如，假設我們想要在C:磁碟機下建立一個叫做mypython的資料夾，然後在裡面開始練習編寫自己的Python程式，整個操作過程如下：

```
(base) C:\Users\minhuang>cd \

(base) C:\>md mypython

(base) C:\>cd mypython

(base) C:\mypython>jupyter notebook
```

{% hint style="info" %}
在上述的操作過程是在Windows 10 的Anaconda Prompt環境中進行的，其中用到了許多DOS的指令。如果同學們使用的是Mac OS，只要直接進入終端機介面，也是在介面中以Linux Shell命令
{% endhint %}

在按下Enter一段時間之後，就可以在你的瀏覽器中看到了如下所示的畫面：

![](/files/-LNelkIygt9Kb0GuRmnh)

和我們之前的畫面不同的地方在於，在這個畫面中的檔案列表是空的，這是因為這個資料夾是我們新建的，所以裡面就沒有任何的檔。要開始編寫程式，只要到右上角的「New」按鈕按下去，選擇Python 3，系統就會協助我們開啟另外一個叫做Untitled的編輯介面，如下所示：

![](/files/-LNenLEff7BEIs4k8zMo)

這個介面看起來有點像是IPython Shell的瀏覽器介面，可以直接在文字框中輸入程式碼，然後按下上方的「Run」就能夠執行這個程式。

{% hint style="info" %}
在Jupyter Notebook中，每一個可以用的輸入框都叫做一個Cell。
{% endhint %}

{% hint style="warning" %}
雖然看起來看IPython的操作邏輯很像，不過要特別小心的是，不同的Cell中所設定的變數並沒有共享的概念。
{% endhint %}

### Spyder

在程式設計界中，整合式開發環境（Integrated Development Environment, IDE）已經是開發專案的主流方式，它是執行一個應用程式，在這個應用程式中有各式各樣開發所需要的工具，包括文字式的程式碼編輯器，此種編輯器至少都具備有高亮度以及各種色彩以標示出程式碼中不同屬性的文字內容，而且還有輸入提示、自動定位以及補齊，避免程式碼在輸入的過程中拼錯文字，還有一些括號和符號的自動補上等功能。

在程式碼編輯環境中完成了程式之後，可以使用快速鍵或是按下「執行」按鈕，IDE就會把你的程式拿去給翻譯程式進行直譯或編譯的工作，在此作業過程中如果發生了任何語法上的錯誤就會立即顯示出錯誤的種類以及指出錯誤的地方，方便程式開發人員修正該處錯誤。

順利翻譯完成之後，IDE就會把翻譯過的程式透過語言核心系統加以執行，並在同一個環境中顯示出（輸出）執行的結果。如果是程式邏輯上的錯誤，大部份的IDE環境都還有輔助的除錯器讓程式人員可以得知在某些時刻的執行系統記憶體狀態，協助程式人員可以較容易地找出隱藏在程式中的錯誤。

以上所有的操作通通可以在同一個程式中的不同視窗中完成，程式人員在開發程式專案的過程當中完全不需要切換環境，讓開發的過程變得更加地便利。Python有非常多的IDE可以選用，有些是免費的，有些則需要收費，Spyder是隨附於Anaconda套件中的一個免費的IDE，在安裝完Anaconda之後就可以直接執行。執行之後的畫面如下所示：

![](/files/-LNp8U9fqYbQWZ2fLziU)

此環境和瀏覽器中的repl.it網站很類似，不過它是在自己電腦中安裝的應用程式，執行的效能較好，而且寫出來的程式也擁有最大的彈性，因為程式是在本地端執行的，別說是可以上網存取網際網路上的資料了，就連存取本地端電腦中的資料夾、和本地伺服器連線等等都可以輕易地把這些功能的程式碼編寫到程式中，而且在也可以很容易地使用在本地端電腦中自己以pip套件管理程式所安裝的套件。

{% hint style="info" %}
使用線上瀏覽器的Python開發環境最大的缺點就是許多程式碼的功能是受到限制的，不僅沒有辦法存取本地端的檔案資料，就連要讓程式連上網際網路都會受到限制，畢竟它們也主機也很擔心被人利用，編寫了惡意的程式碼去攻擊它人的主機及伺服器。
{% endhint %}

如上圖所示，在應用程式的左側是編輯程式碼的地方，右下角是顯示輸出的結果，上方的功能表列中，有許多包括執行、停止、檔案處理等功能。以下是輸入一個程式之後的執行結果：

![](/files/-LNpCMvNrTXi5-2S3VCA)

如果你要編寫的程式不大的話，其實不需要用到這個Spyder的IDE環境，而說真的，它的程式碼編輯器也沒有特別好用。其實老師比較推薦下面這個方法。

### 程式碼編輯器

網路上有許多免費好用的程式碼編輯器，它們可以自由地調整編輯環境，控制編輯過程的一些功能（例如需不需要自動補齊指令等），以及一些方便好用的快捷鍵，最重要的是，程式通常地都相當地輕巧，載入時間也快。這一類的程式碼編輯器包括Sublime Text, Notepad++, TextWarngler等等，老師比較常用的是第一個。它的官網如下：

{% embed url="<https://www.sublimetext.com/>" %}

請選擇其中任一個版本安裝即可。安裝完畢之後並執行，一開始就是一個空的文字編輯器，開始輸入第一行文字之後，我們會把它儲存成為.py的檔案，此檔案就會被視為Python程式檔，並以Python的高亮度語法顯示，以及導入自動縮排及對齊功能。

![](/files/-LNpEm9dBuYQme1dcSn3)

{% hint style="info" %}
習慣上我們會建立一個新的資料夾（在此例為myPython），然後把所有的Python程式碼都放進去。
{% endhint %}

以下是存檔完成之後的程式碼顯示外觀：

![](/files/-LNpFTfuHfRBHaAaJj0A)

存檔完畢之後，由於這只是一個程式碼編輯器，所以並不能在這裡執行此程式，而是到終端機（MacOS）或是命令提示字元（Windows）以如下的命令執行這個程式（假設程式叫做score.py）：

```
python score.py
```

執行過程如下所示：

```
heaohuangde-MacBook-Air:~ minhuang$ cd ~/Desktop/myPython
heaohuangde-MacBook-Air:myPython minhuang$ ls
score.py
heaohuangde-MacBook-Air:myPython minhuang$ python score.py
國文成績：56
英文成績：54
數學成績：85
總分是195分，平均是65.0分
國文成績：62
英文成績：41
數學成績：18
總分是121分，平均是40.333333333333336分
國文成績：^CTraceback (most recent call last):
  File "score.py", line 2, in <module>
    chi = int(input("國文成績："))
KeyboardInterrupt
heaohuangde-MacBook-Air:myPython minhuang$ 
```

{% hint style="warning" %}
最後是按下Ctrl+C結束程式，因為我們這個程式是無窮迴圈。
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://nkust.gitbook.io/python/shi-hang-python.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
