最近晚上閒來無事,所以開始在 Coursera 上學 Python,雖然才剛結束 1/5 的課程,但只能說,同樣身為直譯式語言,從 JavaScript 接 Python,在撰寫邏輯上沒什麼太大的銜接困難。
要寫 Python 的方式有很多,像我一個當數據工程師的朋友式直接寫在 AWS lambda 或 Notepad++ 中,而我則是選擇沿用 VScode 來做為編輯器。
如何在本地端安裝 Python,我之前寫過一篇關於 AWS 部屬的文章,裡面有寫到,可以參考一下。安裝完後只要在 VScode 安裝 Python 套件就能順利在 VScode 寫 Python 了。
然後在 VScode 中的設定更改一下下圖的設定,不然 Python 中的 input
語法會找不到輸入的地方。
從 JavaScript 過來寫 Python,比較需要習慣的是定義區塊程式碼的差別。比如判別式 if-else
,在 JavaScript 中我們會用 {...}
包起來作為一個區塊:
if(A){
// do something
}else{
// do another thing
}
但在 Python 中,是使用縮排來定義區塊程式碼,所以 if-else
會變這樣:
if A:
# do something
else:
# do another thing
原本在 JavaScript 為了提高程式碼可讀性的縮排到了 Python 被賦予有意義的使命。
判別式是寫程式的靈魂之一,上面已經介紹了最基本的判斷式寫法,對於那些需要做多項判斷的事件,比如下列範例的依據使用者成績輸入來回傳成績等第,可以這樣寫:
grade = input('enter your grade:')
grade = float(grade)
if grade > 1 or grade < 0:
print('you must enter the number between 0-1')
elif grade >= 0.9:
print('A')
elif grade >= 0.8:
print('B')
elif grade >= 0.7:
print('C')
elif grade >= 0.6:
print('D')
else:
print('F')
在這裡解釋一下,input
允許使用者輸入一段內容,默認型態是字串,所以會用 float
轉成浮點數才能進到判別式中一層層做比較。
同樣,我們在 JavaScript 中會用 function
來定義函式,但在 Python 中必須使用 def
來定義函式:
def computepay(a, b):
ta = float(a)
tb = float(b)
if ta < 40:
return ta * tb
else:
return 40 * tb + (ta - 40) * tb * 1.5
hrs = input('enter hours:')
rate = input('enter rate:')
print(computepay(hrs, rate))
向上述就透過 def
和縮排定義了一個函式,並在 print
中呼叫了這個函式。
Python 的迴圈同樣有 while
與 for
迴圈,針對不同需求有不同應用。while
適合在不知道循環次數,只想針對某一個條件一直執行程式碼時使用;for
就適合用在規定尋換次數下執行程式碼。
我們可以寫個簡單的 while
迴圈,根據使用者的輸入來決定迴圈是否繼續執行:
while True:
try:
num = input('enter number')
if num == "done":
break
else:
trNum = float(num)
if largest == None and smallest == None:
largest = trNum
smallest = trNum
elif largest < trNum:
largest = trNum
elif smallest > trNum:
smallest = trNum
except:
print('Invalid input')
continue
print('Maximum', largest)
print('Minium', smallest)
上述的意思是,當使用者輸入 done 時,就透過 break
跳出迴圈繼續執行之後的 code,而如果輸入的是數字就一直執行這個迴圈,直到使用者輸入 done 為止。
在上述還可以看到一個 try-except
的用法,這是 Python 中做例外處理的語法,是為了避免程式碼出錯而程式運行中斷而產生的語法。
當我們不寫 try-except
,把上面的 code 改成這樣:
largest = None
smallest = None
while True:
num = input('enter number')
if num == "done":
break
else:
trNum = float(num)
if largest == None and smallest == None:
largest = trNum
smallest = trNum
elif largest < trNum:
largest = trNum
elif smallest > trNum:
smallest = trNum
print('Maximum', largest)
print('Minium', smallest)
程式碼仍然可以執行,但如果用戶今天輸入的內容無法轉為數字,比如輸入 "ABC",因為 float 無法將其轉為浮點數,所以 Python 會噴出一段錯誤 ValueError: could not convert string to float: 'ABC',並中斷程式執行。
而靠著 try-except
,我們可以讓程式碼優先執行 try
區塊中的邏輯,當如果出現錯誤才去執行 except
中的事情。
一開始的 while
迴圈中的 try-except
就是跟 Python 說:如果出現錯誤 (使用者輸入無法轉成浮點數的內容),就印出一段訊息,並透過 continue
重新執行迴圈。
最後看一下 for
迴圈,基本上只要定義好執行次數 (範圍),就領會 for
迴圈的精隨了,例如印出最經典的 1-5 數字:
for i in range(1, 6):
print(i)