Python Tutorials

Part 1. 程式基礎與數學篇

Programming Basics and Math Python

 

Section 1. 開始

學習程式由Python入手,是一個相當理想的選擇。主要的原因是Python是一個多功能的語言,除了數學上的數值與符號運算,更可以用來開發軟體,寫app和網站。本站的數學,除了數值,也將介紹符號計算(Symbolic Computation).也包含PDF和WORD文件讀取的技術。

Section 1. 開始

主題 1. 裝置

主題 2. 基礎數學運算

主題 3. 指派運算子Assignment Operator

主題 4  Anaconda--使用整合性圖形界面 IDE

主題 5. 流程控制

主題 1. 裝置

在此我們先有一個好的開始,先學習如何成功的裝置軟體。

Step 1. 進入Python官方網站https://www.python.org/,如圖1-1,把滑鼠指向選單Downloads處,會跳出軟體下載區的方框。
作業系統有很多種,如果是蘋果電腦,就點選下方的Mac OS X;其餘的請選Other Platforms。本站教學以Windows版為準。

Py1-1
圖 1-1. 進入Python 官網

Step 2. 下載軟體
承上,點選進入後,就會看到如圖 Py 1-2。Python 2.x和3.x的糾葛就不談,我們以3.7為主要版本。直接按,就會傳輸32位元的安裝檔python-3.7.0.exe

Py1-2
圖 1-2. 下載3.x最新版

如果需要安裝64位元的版本,就依圖點選,進入圖1-3。其安裝檔名是python-3.7.0-amd64

 

Py1-3
圖 1-3. 下載64位元Python

Step 3. 下載完成後,啟動安裝檔。3.7版的選項,可以在裝置時就設定好環境變數。如果是初學者,請務必一步一步看清楚選項,避免事後又出現一堆設定問題。如圖 1-4指示,下方打勾可以寫入環境變數路徑(path);如果忘了打勾,事後還是可以另外由控制台進入填寫。

 

Py1-4
圖 1-4. 依圖形點選,尤其是下方打勾

Step 4. 裝置完畢後,以Windows 7為例,以IDLE啟動Python (開啟Python的方法還可以透過「命令提示字元」或Power Shell。為了不讓初學者感到負擔過重,我們現階段只介紹IDLE一種,之後會以Spyder 為主)。IDLE是Python GUI(Graphical User Interface),如圖 1-5

Py1-6
圖 1-5. 啟動Python


啟動Python之後,直接進入Python Shell或主控台(Console),如圖 1-6。圖 1-6的Python Shell是所謂的命令列模式(Command Line Mode),現在請使用者在浮標處鍵入1+1,即
>>> 1+1
然後按下Enter,就會出現
>>> 2

 

Py1-6
圖 1-6. Python Shell主介面

命令列模式就是一個指令,一個Enter執行一個動作,如要執行數行指令,就必須按很多Enter。例如:
y=2
y=3
x+y
就要按3次Enter,而且輸入的東西,下次就不見了。所謂的寫程式當然不是這樣,我們要利用批次檔(scripting file)。依照以下三個圖說,打開批次檔。

Py1-7
圖 1-7. 從主選單File →New File

Py1-8
圖 1-8. 開啟一個空白的檔案Untitled,可以先給一個名稱儲存起來,例如,01.py,附檔名 .py 會自動添加不用輸入。

Py1-9
圖 1-9. 在批次檔內,如圖鍵入三行,需要顯示於Shell的,必須加上print(),然後按F5或如選單指示Run→Run Module。

 

如果到此,完全成功,恭喜您,接下來可以透過微積分,循序逐章學點Python的數學和資料結構。希望上一步一步,Python已經 有了紮實的入門,未來將無限寬廣。後面會介紹使用IDE Anaconda,目前我們先使用IDLE shell。

 

主題 2. 基礎數學運算


(一) 四則運算
>>> 6+5                                              加
11       
>>> 6-9                                               減
-3
>>> 81/9                                             除(整除)
9.0
>>> 80/9                                 除(非整除)
8.88888888888889    
>>> 80//9                                除(無條件捨去)
8         
>>> 5*5*5                              5的3次方=53
125     
>>> 5**3                                5的3次方另一種表示方法
125     
需注意,Python內 “次方” 不是用^
>>> 300%15                    餘數
0                          
>>> 300%11
3

(二) 數值型態轉換
>>> int(2.125)                 整數
2                          
>>> round(3.14159) 四捨五入
3.0                                               
>>> round(3.14159, 2)
3.14
>>> round(3.14159, 3)
3.142

>>> import operator    載入比較算子模組(因下面的函數需要)(Python2 比較大小有一個函數cmp,我們用的 Python3 沒有這函數,相關功能是由模組 operator 達成。)

>>> operator.lt(2, 3)   是否2<3? lt=less than
True
>>> operator.gt(2, 3)   是否2>3? gt=greater than
False
>>> operator.eq(-2, -3)  是否-2=-3? eq=equal to
False
>>> operator.ne(2, 2)  是否 2¹2? ne=not equal to
False

>>> import math                       載入數學模組math (因下面的函數需要)
>>> math.floor(2.71828) 小於等於2.71的最大整數
2                                                                                      (數線上,邊的第1個整數)
>>> math.ceil(2.71828) 大於等於2.71的最小整數
3                                                                                      (數線上,邊的第1個整數)
>>> math.sqrt(9)                          平方根
3.0
>>> abs(-123)                              絕對值 |-123|
123
>>> math.exp(2)                          自然指數 e2
7.38905609893065
>>> math.exp(1)                         自然指數 e
2.718281828459045
>>> math.log(100)       自然對數 ln(100)
4.605170185988092
>>> math.log10(100)     以10為底的對數
2.0
>>> math.pi                                             p
7.38905609893065
>>> math.factorial(5)                   5!=1x2x3x4x5
120
>>> x=(1, 3, 5, 7, 9)
>>> max(x)                                              最大值
9
>>> min(x)                                  最小值
1

 

練習. 已知一函數:

,請用計算Python計算f(-1.23)=?

參考作法
>>> x = -1.23
>>> y = (1/math.sqrt(2*math.pi))*math.exp(-1/(2*x*x))
>>> y
0.2866682534882691

主題 3 指派運算子Assignment Operator

Assignment Operator為一種運算子,用以指派給一變數或資料結構。Python 有多個指派算子。

指派算子

範例

解釋

=

x = 50

數字 50 指定給 x

+=

x += 50

同 x = x + 50

-=

x -= 50

同 x = x – 50

*=

x *= 50

同 x = x * 50

/=

x /= 50

同 x = x / 50

%=

x %= 50

同 x = x % 50

//=

x //= 50

同 x = x // 50

**=

x **= 50

同 x = x ** 50

&=

x &= 50

同 x = x & 50

|=

x |= 50

同 x = x | 50

^=

x ^= 50

同 x = x ^ 50

<<=

x <<= 50

同 x = x << 50

>>=

x >>= 50

同 x = x >> 50

練習
以下有幾個範例,請學習者在 Python Shell 練練手感,體會運算子的意義。
a = 6
x = 36
x += a  # 使用 +=
print(x)
x -= a      # 使用 -=
print(x)
x *= a                  # 使用 *=
print(x)
x //= a                 # 使用 //=
print(x)
x **= a    # 使用 **=
print(x)
x /= a      # 使用 /=
print(x)
x %= a    # 使用 %=
print(x)
x = 33
y = 88
x &= y    # 使用 &=
print(x)
x |= 9       # 使用 |=
print(x)
x ^= y      # 使用 ^=
print(x)

 

主題 4  Anaconda--使用整合性圖形界面 IDE

裝置 Python 有其他方法,最主要的一種就是透過Anaconda (https://www.anaconda.com/download/ ),如圖Py 4-1。

Py4-1.tif
圖Py 4-1. 下載Anaconda 最新版

Anaconda是一個使用Python的IDE(Integrated Development Environment),裝置同時,也裝好Python所有設定和套件下載十分簡易。

Anaconda外觀如圖Py 4-2,右邊的Spyder就是很受歡迎的Python IDE,其他的工具也很有用。但是,Anaconda 帶入的 Python 版本不是最新的,是最新前一版。其實,這多半不是問題。

程式語言是靠載入模組來擴充功能,程式語言的套件類似 EXCEL 的增益集。數學套件 math 是內建,因此不需要額外載入。
Py4-2.tif
圖Py 4-2. Anaconda環境

初學者,不涉及資料分析,其實用Python內建的IDLE就夠用了。第3章開始,我們不再IDLE內key一行執行一行。會使用Spyder這個介面,一次書寫多行,一次執行,提高寫 Python程式的效率。

依照上圖,Launch Spyder後,下載程式檔 learningPython2-2_plot.py,如圖Py 4-3. 使用IDE的好處之一是可以局部執行程式,用滑鼠框起來部分代碼,滑鼠右鍵就可以執行所選(Run selection or current line),或依照線段按圈起來的圖示都可以。如果使用IDLE,對話視窗必須一行一行執行,若開程式檔,必須全部執行。

Py4-3.png
圖Py 4-3. 在Spyder的程式learningPython2-2_plot.py

 

執行上述區塊完畢,就會畫出圖形,如圖Py 4-4. 右邊主控台顯示結果,要另外儲存圖檔,使用滑鼠點選圖樣後,滑鼠右鍵就可以儲存圖檔。

Py4-4.png
圖Py 4-4. 右邊主控台顯示結果

 

IDLE的主控台無法清理,但是Spyder只需要在命令列(如圖In [5] 的位置)鍵入cls就可以。

我們先來在Spyder內解聯立方程式,這主題應該高中代數會教。已知一個如下聯立方程式

我們先定義係數矩陣

常數向量

Python 程式碼可以這樣處理
第1步:先載入模組
import scipy as sp
import numpy as np
第2步:再定義A和B
A=sp.mat('[1 2 -5; 2 5 1; 2 3 8]')
B = sp.mat('[10;-8;5]')

方法一:代公式
因為A的逆矩陣是A.I
故此題解是
A.I*B

方法二:用numpy 內的method linalg.solve()
        np.linalg.solve(A, B)

        請自行確認答案是不是                                                                               
matrix([[ 25.96551724], [-11.68965517], [ -1.48275862]])

 

練習
解聯立方成組 ,同學互相確認答案

有興趣的同學們,可以自行更改方程組的數值,再互相確認答案,抑或取出高中課本題目,練習程式。

 

使用IDE的開始,就到此處。學習過程,如要一開始就始用IDE也可以,Anaconda 內 IDE 也不止 Spyder, Spyder的啟用也不需要在 Anaconda。本處撰寫,逐章依序介紹,其實,如何選擇,都可以自己決定。

 

主題 5. 流程控制


Python乃至任何程式語言都有流程控制,也就是條件式判斷True/False。流程控制用於檢查條件是否吻合,以執行下一步程式;例如,通關密語,過關為真(True),可繼續執行下一步。可以分為「關係運算子」,「邏輯運算子」和「if…., then」等三類。依序介紹

5.1 關係運算子 relational operator
關係運算是判斷六組關係的「比較」,這六組關係如下

關係運算子

意義

範例

說明

小於

A<B

檢查A是否小於B

<=

小於或等於

A<=B

檢查A是否小於等於B

大於

A>B

檢查A是否大於B

>=

大於或等於

A>=B

檢查A是否大於等於B

==

等於

A==B

檢查A是否等於B

!=

不等於

A!=B

檢查A是否不等於B

關係運算子的練習,可以不用Spyder,在Command line 鍵入以下範例即可
範例
>>> print(10>9)
>>> print(10<=10)
>>> print(10 != 0)
>>> print(5== 5)

當然,也可以用指派,如下
範例
>>> X=10>9
>>> print(X)

 

5.2 邏輯運算子 logical operator
邏輯運算子可以用來判斷多個關係,一般程式語言基本上一定會有三種:and(且), or(或), not(非)
我們看三個例子
範例
(1) A and B: 「A為真」且「B為真」,此事件才為真

>>> X=(10>5) and (23>15)
>>> print(X)
True

>>> X=(3.45>3) and (2>5)
>>> print(X)
False

(2) A or B: 「A為真」或「B為真」,兩者一個為真,此事件就為真
>>> X=(4>3) or (2>5)
>>> print(X)
True

(3) not():
>>> X= not(4>3)
>>> print(X)
False

>>> X= not(5<10)
>>> print(X)
True

 

5.3 if 敘述
if 敘述的基本語法如下
if (條件):
        條件為真執行的程式

if 敘述的內容較多,讀者此時可以啟動Spyder來練習。舉例如下

範例
if (score >= 60):
        print("恭喜!")
        print("你的微積分成績過關了。")

用上面的寫法,下兩行要內縮4個字元空間或用Tab,以宣告這是if敘述的區塊。內縮必須一致,不能有多有少。

有的程式寫法是用大括號{},例如C語言,
if (score>=60){
        printf("恭喜!你微積分成績過關了。");
        printf("抱歉!微積分明年重修囉。");
}

各個程式的差異都不大,知道是如何定義的即可。

範例
number = int(input(" 請輸入任何整數: "))
if number >= 1:
        print(" 您輸入的是正整數 ")
        print(" 您輸入的不是正整數 ")

上例中,函數input()是輸入請求功能,

         5.4 「if….. else」的敘述
結構如下
if (條件):
        條件為真,執行的程式區塊
else:
        條件不為真時,執行的程式區塊

範例
if (score >= 60):
        print("恭喜!你微積分成績過關了。")
else:
        print("抱歉!微積分明年重修囉。")

 

我們要將正負1之間的小數,做一個對數的計算:。且萬一輸入的數字超過邊界,必須出現錯誤警訊,寫法如下

範例
import math    
x0=input("請輸入正負1之間任意小數: ")
x=float(x0)
if (abs(x)>1):
        print("錯誤!")
        print("輸入數字超過邊界")
else:
        y=math.log((1+x)/(1-x))
        print(y)   

練習
1. 請刪除上例之範圍條件,然後將轉換改成指數函數。
2. 請將上例之範圍條件改成非負的正數(³0),然後將轉換改成指數函數,然後輸入很大的x,和3-1的習題第五題確認一下。

         5.5 「if….elif…. else」的敘述

        這是一個多重判斷,寫程式時遇到多個條件的分類時,就很有用。例如,目前已經被很多大學採用的成績的等第制度。90~100是A+,85~89是A,80~84是A-,77~79是B+,73~76是B,70~72是B-,研究生的最低標準是B-。

sc=input("請輸入成績: ")
score=int(sc)
if (score >= 90):
        print("A+")
elif (score >= 85):
        print("A")
elif (score >= 80):
        print("A-")
elif (score >= 77):
        print("B+")
elif (score >= 73):
        print("B")   
elif (score >= 70):
        print("B-")
else:
        print("Failed")

練習
請用邏輯運算子or改寫上例成績等第的多重判斷

         5.6 巢狀的if敘述

           巢狀(nested)的if敘述是指if內還有一層if

age = int(input(" 請輸入年齡:  "))
if age < 18:
        print(" 您未成年 ")
        print(" 您的年齡不符合本專案規範 ")
else:
if age >= 18 and age <= 60:
        print(" 您符合本專案規範 ")
        print(" 請填妥以下表格完成申請 ")
else:
        print(" 您已經超齡 ")
        print(" 您的年齡不符合本專案規範")

        寫程式是不是很好玩?慢慢學,和自己課程結合,很容易的。如前所說,函數定義了一組運算,接下來我們要學習如何用Python定義函數,幫助我們計算一些複雜的公式。

練習
1. 請設計一個可以執行以下4件事的程式:
(1) 若輸入英文大寫,則轉成小寫
(2) 若輸入英文小寫,則轉成大寫
(3) 若輸入數字,則直接輸出
(4) 其他字元,則輸出「錯誤」兩字

2. 請設計一個程式,可以執行以下階梯函數的計算: