學習程式由Python入手,是一個相當理想的選擇。主要的原因是Python是一個多功能的語言,除了數學上的數值與符號運算,更可以用來開發軟體,寫app和網站。本站的數學,除了數值,也將介紹符號計算(Symbolic Computation).也包含PDF和WORD文件讀取的技術。
Section 1. 開始
主題 3. 指派運算子Assignment Operator
主題 1. 裝置
在此我們先有一個好的開始,先學習如何成功的裝置軟體。
Step 1. 進入Python官方網站https://www.python.org/,如圖1-1,把滑鼠指向選單Downloads處,會跳出軟體下載區的方框。
作業系統有很多種,如果是蘋果電腦,就點選下方的Mac OS X;其餘的請選Other Platforms。本站教學以Windows版為準。
圖 1-1. 進入Python 官網Step 2. 下載軟體
承上,點選進入後,就會看到如圖 Py 1-2。Python 2.x和3.x的糾葛就不談,我們以3.7為主要版本。直接按,就會傳輸32位元的安裝檔python-3.7.0.exe。
圖 1-2. 下載3.x最新版如果需要安裝64位元的版本,就依圖點選,進入圖1-3。其安裝檔名是python-3.7.0-amd64。
圖 1-3. 下載64位元PythonStep 3. 下載完成後,啟動安裝檔。3.7版的選項,可以在裝置時就設定好環境變數。如果是初學者,請務必一步一步看清楚選項,避免事後又出現一堆設定問題。如圖 1-4指示,下方打勾可以寫入環境變數路徑(path);如果忘了打勾,事後還是可以另外由控制台進入填寫。
圖 1-4. 依圖形點選,尤其是下方打勾
Step 4. 裝置完畢後,以Windows 7為例,以IDLE啟動Python (開啟Python的方法還可以透過「命令提示字元」或Power Shell。為了不讓初學者感到負擔過重,我們現階段只介紹IDLE一種,之後會以Spyder 為主)。IDLE是Python GUI(Graphical User Interface),如圖 1-5
圖 1-5. 啟動Python
啟動Python之後,直接進入Python Shell或主控台(Console),如圖 1-6。圖 1-6的Python Shell是所謂的命令列模式(Command Line Mode),現在請使用者在浮標處鍵入1+1,即
>>> 1+1
然後按下Enter,就會出現
>>> 2
圖 1-6. Python Shell主介面
命令列模式就是一個指令,一個Enter執行一個動作,如要執行數行指令,就必須按很多Enter。例如:
y=2
y=3
x+y
就要按3次Enter,而且輸入的東西,下次就不見了。所謂的寫程式當然不是這樣,我們要利用批次檔(scripting file)。依照以下三個圖說,打開批次檔。
圖 1-7. 從主選單File →New File
圖 1-8. 開啟一個空白的檔案Untitled,可以先給一個名稱儲存起來,例如,01.py,附檔名 .py 會自動添加不用輸入。
圖 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)
裝置 Python 有其他方法,最主要的一種就是透過Anaconda (https://www.anaconda.com/download/ ),如圖Py 4-1。
圖Py 4-1. 下載Anaconda 最新版Anaconda是一個使用Python的IDE(Integrated Development Environment),裝置同時,也裝好Python所有設定和套件下載十分簡易。
Anaconda外觀如圖Py 4-2,右邊的Spyder就是很受歡迎的Python IDE,其他的工具也很有用。但是,Anaconda 帶入的 Python 版本不是最新的,是最新前一版。其實,這多半不是問題。
程式語言是靠載入模組來擴充功能,程式語言的套件類似 EXCEL 的增益集。數學套件 math 是內建,因此不需要額外載入。
圖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,對話視窗必須一行一行執行,若開程式檔,必須全部執行。
圖Py 4-3. 在Spyder的程式learningPython2-2_plot.py
執行上述區塊完畢,就會畫出圖形,如圖Py 4-4. 右邊主控台顯示結果,要另外儲存圖檔,使用滑鼠點選圖樣後,滑鼠右鍵就可以儲存圖檔。
圖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。本處撰寫,逐章依序介紹,其實,如何選擇,都可以自己決定。
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. 請設計一個程式,可以執行以下階梯函數的計算: