本篇將 Python 2 相關內容預設為隱藏,若需在顯示與隱藏間相互切換請點這裡。
我們首先來印出固定的少量內容。這在 Python 當中非常簡單,以下範例會在螢幕上印出「Hello World!!」:
print('Hello World!!') # 印出一些東西要執行這段程式碼,你可以先在 cmd 當中先開啟 Python 後輸入程式碼,再敲下 enter 來執行;或者將這段程式碼存成一個副檔名為 py 的純文字檔,例如 hello.py,然後在 cmd 當中,用「python hello.py」的方式執行。其中:
- 此處的括號代表呼叫語言提供的內建函式(function),就像數學中 y = f(x) 的那個括號。
- 井字號後面是程式碼的單行註解,可用解釋某一段程式碼的用途。註解是給人閱讀的,裡面的任何文字都不會被當作程式來執行。
- 單引號可以換成雙引號,但是要維持成對,不能一單一雙。
- 在 Python 當中,習慣上不會在每行程式的結尾加上分號,但是加了也不會有語法錯誤。
- 在 cmd 當中輸入,與存成檔案的執行方式,差別之一在於前者通常用於程式碼極為簡短時的語法測試。執行本教材的範例時,除另有說明外,請優先考慮用存成檔案的方式執行。
另外,若是在 Python 2 當中,應該寫成:
print 'OAO'或者:
from __future__ import print_function print('OAO')第一行的 import,主要用於使用外掛功能。較細節的說明,之後會另外介紹
Question:下列程式片段,有哪些語法錯誤?
Print "Hello World!!'目前為止,已經能輸出大部分的固定內容,而程式中的資料,若要能隨著使用者輸入或者運算結果等狀況改變時,則需要用變數來儲存。變數是記憶體裡面的一塊空間,可以用來存放資料,而變數命名時,必須遵循下列的命名規則:
- 以底線或英文大小寫字母開頭。
- 以底線、英文大小寫、數字組成。
- 不可使用保留字(例如:if)與函式名稱(例如:print)。使用保留字通常會產生語法錯誤,使用函式名稱的效果請各位自行嘗試。
Question: 下列哪些變數名稱合法?
- AbCdE
- 34fgh
- test!!
- ab123
將資料塞進變數當中的方法,是使用「=」(指派運算子),例如程式敘述「a = 2」的結果,就是讓變數 a 的值為 2。以下範例會計算一些整數相加的結果:
a = 1 b = 2 c = a + b + 3 print(c) # 因為是單純印出變數的內容,所以不用加引號在上述範例中,運算子左右不一定要加空白;但是為了方便閱讀程式,通常會如同範例顯示那樣的加上空白。
以下將基本的運算子稍做整理:
- 「+」、「-」、「*」、「/」或「//」:加減乘除。
- 「**」:次方,底數在前指數在後。
- 「%」:取餘數(模數運算, modulo)。
- 「()」:括號,必須成對。
- 「=」:指派,將運算結果指定給某個變數。
運算子之間,會遵守優先順序,例如先乘除後加減,以及括號先算等等;而優先層級相同時,則一般來說是由左到右運算。另外要注意的是,變數一旦被指派了新的值,則舊的值會永遠消失。例如先寫了「a = 1」的敘述,而後面又接著「a = 2」,則此時的變數 a 的值,會由 1 變成 2。以下簡單展示幾個使用運算子的範例。
四則運算時,是先乘除後加減,若你希望加減先算,則要明確地加上括號。你可以比較看看以下兩組算式的結果:
print( 12 * (18 - 15) * 17 ) print( 12 * 18 - 15 * 17 ) print( 560 * (1 + 0.3 + 0.2) ) print( 560 * 1 + 0.3 + 0.2 )優先層級相同時,則一般來說是由左到右運算,若你希望右邊先算,則也要明確地加上括號。你可以比較看看以下兩個算式的結果:
a = 3000 b = 12 c = 15 print( a / (b * c) ) print( a / b * c )依此類推,例如三個整數取平均的計算,可以寫成如下:
a = 1 b = 2 c = 3 d = (a + b + c) / 3 # 變數跟固定文字混在一起印的方法很多,以下是其中兩種,其中的雙引號皆可換成單引號 print(f"Avg of {a}, {b}, and {c}: {d}") print("Avg of {}, {}, and {}: {}".format(a, b, c, d))次方的運算順序不太一樣,在 Python 是依照數學上的定義,從右邊運算;因此若你希望左邊先算,則也要明確地加上括號。你可以比較看看以下幾個算式的結果:
print( 2 ** 2 ** 2 ** 2 ) # 預設順序 print( 2 ** (2 ** (2 ** 2)) ) # 右邊先算 print( ((2 ** 2) ** 2) ** 2 ) # 左邊先算書寫數學式時,我們習慣省略乘號,但在 Python 中,仍然必須寫出乘號,否則會出現語法錯誤,如下:
a = 3 b = 2 print(2 * a) print(3b) # 這行會產生語法錯誤Question: 兩行 print 分別會印出什麼?
a = 1 a = a + 1 print(a) b = a + 1 a = a + 1 print(a, b)在前面幾個範例中,除法的結果都恰好是整數,如果在數學上有小數的話,那麼在程式語言中,我們可以利用不同的運算符號,讓程式計算是否捨去小數的結果
a = 8 / 3 b = 8 / 4 c = 8 / 5 print(a, b, c) a = 8 // 3 b = 8 // 4 c = 8 // 5 print(a, b, c)在上述範例中,一個斜線會保留小數,兩個斜線會往負的方向取整數;而在 Python 2 當中,則都是往負的方向取整數。但當你在 Python 2 中使用了「from __future__ import division」之後,就又會跟 Python 3 一樣。
在 Python 語言中,餘數的正負號會與除數相同,即 a % b 相當於計算 a - a // b * b。以下是用「%」符號求餘數的範例:
print(15 % 4) print(-15 % 4) print(15 % -4) print(-15 % -4)關於其他一些的 print 使用與其格式控制,範例如下。其中,三個引號是多行字串,但也可以當作多行註解使用:
''' 以下為了讓不同格式間的輸出效果更明顯, 因此在前後都加上底線來輔助顯示 ''' print('__{:5d}__'.format(123)) # 靠右輸出 5 位整數,前方空白 print('__{:05d}__'.format(123)) # 靠右輸出 5 位整數,前方補 0 print('__{:10.2f}__'.format(12345.678)) # 靠右輸出浮點數,總共 10 位,小數點部分 2 位。輸出結果會被四捨五入若要接收使用者輸入的變數,則可使用 input 函式(目前,我們只先介紹一次讀取一個數字的方法)。以下是兩個整數相加的範例,為了避免次一行程式被當成這一行的輸入,請存成 py 檔,或者逐行執行:
a = input('Please enter 1st number: ') b = input('Please enter 2nd number: ') print(a + b)你可能會發現結果跟預期的不太一樣,這是因為輸入的內容被當成一般文字,而加號在此種情況下的行為是文字的連接。若要修正,可以進行如下的幾種修改之一:
a = int(input('Please enter 1st number: ')) b = int(input('Please enter 2nd number: ')) print(a + b) a = input('Please enter 1st number: ') b = input('Please enter 2nd number: ') a = int(a) b = int(b) print(a + b) a = input('Please enter 1st number: ') b = input('Please enter 2nd number: ') print(int(a) + int(b))當然,如果你希望輸入小數,並進行小數的運算,則把「int」改為「float」就可以達成目標。另外,若使用 Python 2,則會自動判斷輸入的類型;但是像上述範例這樣明確地寫出要使用整數運算,仍會對釐清程式的運作細節有幫助。
Question: 下列修改方式是否可亦可達到進行整數相加的效果?為什麼?
a = input('Please enter 1st number: ') b = input('Please enter 2nd number: ') print(int(a + b))Question: 如果你想進行小數運算,但是「剛好忘記」把 int 改成 float,會發生什麼事?為什麼?請觀察結果並試著解釋。