python和其它的直譯式語言來說,(如php、perl)大同小異,雖然我很抗拒,但還是稍微摸了一下。
程式語言大同小異,所以這篇不給初學者看,只給有一點其它語言基礎的人要快速上手python的語法整理,本篇會著重在異差上說明,而不會仔細的說明,太難的我也不會。
我相信有些人看完重點提示後就能快速上手python。
結構
1. 不用大括號,採用縮排來分段。縮排可以用空白或是tab來決定,官方建議用 4 個空格縮排,不要用 tab 鍵。 一個縮排段落內的縮排方式與數量必須維持一致。 例如你決定用四個空白當縮排,那整個文檔的縮排就只能用四個空白,三個空白或五個空白都會報錯。我記得以前學過 true basic 也是這個架構。
2. 運算符(+-*/)、'='的前後請加上空白,雖然不會報錯,但會出現警告。
3. 行尾不必有分號 ';' ,加了也無所謂只是會警告,行前後不要有多餘的空白,否則會出錯或警告
4. 使用 # 作為註解,等於c-like語言的 '//' ;用三個雙引號 """ ... """ 等於c-like語言的 '/* */' 以大範圍註解。
5. 變數前不用加錢字號 '$'
6. python 算是強型別,有int, float, string, decimal, complex 等等,你無法忽略型別,例如你要印數字,你得把他轉成字串。
7. python 具有布林值 True/ False,首字必須大寫才是布林值。例如 a = True
8. 函數可回傳多值、多型態,不像一般語言只能回傳單值。
9. 可快速指定變數,例如 a, b, c = 1, 2, 3
運算子及資料結構
值得注意的運算子
x * y 乘法,字串的乘法就是複製
x % y 餘數除法
x ** y 次方
字串拆解
字串拆解很簡單,因為字串就是一個字元串列
s = 'Onetwothree'
s1= s[1:] #netwothree
s2= s[3:-1] #twothre
s3= s[0].upper() + s[1:] #Onetwothree 首字大寫
串列 List
不稀奇,串列就是一維陣列,也是最常用的資料型態,使用中括號作標記
squares[0] #1
squares[-1] #25
squares[-3:] # 新list [9, 16, 25]
squares + [36, 49, 64, 81] #接合 [1, 4, 9, 16, 25, 36, 49, 64, 81]
squares.insert(2, 22) # 在第2個位置加插入數字22,原本序號2後的數值往後移一位
squares[5] = 36 # 指定值
squares.append(216) # 加一個值在最後面
squares[:] = [] # 清空串列
clear(squraes) # 清空串列
squares[2:4] = [] # 清空第2,3 兩個位置的值,注意第4個位置的值沒有清掉。
del(squares[2]) # 清空第2兩個位置的值
len(squares) # 串列長度
squares.reverse() # 前後顛倒
print(squares) # 印出串列
如果串列裡的值也是串列,就形成多維或是鋸齒陣列。
唯讀串列 Tuple
名稱叫唯讀串列,是我自己取的名,官網叫『元組」我覺得不好。使用小括號作標記,裡面的內容一經給定是不能修改的,其餘和串列一樣。
solar = ('earth','jupiter', ['io', 'ganymede', 'europa'])
print(solar[0]) #earth
print(solar[2][2]) #europa
solar[2][2]='callisto'
print(solar[2][2]) #callisto <== 唯讀串列中的串列是可以修改的
solar[1]='mars' #報錯,唯讀串列不能修改
串列可以使用 tuple() 函數轉成 tuple
sqr= tuple(squares)
字典 dict
就是有名稱陣列(named array),相當於PERL的hash,使用大括號作標記
solar = {'earth': 'moon', 'jupiter': ['io', 'ganymede', 'europa'], 'pluto': 'charon', 'sun': 8}
solar['earth'] # moon
solar['jupiter'][1] # ganymede
len(solar) # 4 長度
del(solar['pluto']) #刪除一個項目
solar['mars']=['deimos', 'phobos'] #加入一個項目
print(solar) # 印出集合
集合 set
集合是不錯的東西,可以用交集|、聯集&、差集-、對稱差集^(交集的相反)等等方式處理「不重覆」的資料
a = set([1,3,6,7,3])
b = set([1,2,5,6])
print(a) #{1, 3, 6, 7} <== 移除重覆的3
print(a&b) #{1, 6}
print(a|b) #{1, 2, 3, 5, 6, 7}
print(a-b) #{3, 7}
print(b-a) #{2, 5}
print(a^b) #{2, 3, 5, 7}
經過set處理過的資料型態會移除重覆、依序排列。
流程控制
if... elif ... else
注意elseif 改成elif
if 2 > 5:
print('2 > 5')
elif 2 < 5:
print('2 < 5')
else:
print('2 == 5')
match ... case
沒有 switch...case....default 但是有 match...case ,在python 3.10版已後才有此功能。
注意不需要 break,也不會像 c-like語言一樣一路執行下去。
x = input("輸入數字: ")
match x:
case 1: print('星期一') #只有一行指令可寫同一行
case 2:
print('星期二') # 不寫同一行要縮排
case 3: pass # 啥都不做
case '4': print('星期四')
case 5.0: print('星期五')
case 6 | 7: print('Weekend')
case _: print("輸入錯誤") # 其它項目用 _
結果:
輸入數字: 3
<<啥都沒發生>>
輸入數字: 4
輸入錯誤 <== 字元和字串和比對失敗
輸入數字: 5
星期五
for ... in
等於 foreach
solar = {'earth': 'moon', 'jupiter': ['io', 'ganymede', 'europa'], 'pluto': 'charon', 'sun': 8}
for it in solar:
print(it + ': ', solar[it])
結果:
earth: moon
jupiter: ['io', 'ganymede', 'europa']
pluto: charon
sun: 8
字串也可以一個一個取出來,請看範例
x = "字串a1;" # list(x)=['字', '串', 'a', '1', ';']
for i in range(len(x)):
print(x[i])
結果:
字
串
a
1
;
range() 函數來取代 for(;;)
range是一個類別,可以產生連續的「串列類別物件」,注意,不是產生「串列」
print(z) #[0, 1, 2, 3, 4] <== 印出串列
x = range(5) #range物件
print(x, type(x)) #range(0, 5) <class 'range'> <==印出類別本身
print(list(x)) #[0, 1, 2, 3, 4]
看看range函數回傳的內容
x = range(5) #[0, 1, 2, 3, 4] <== 注意不包括5
x = range(1, 5) #[1, 2, 3, 4] <== 注意不包括5
x = range(0, 6, 2) #[0, 2, 4] <== 注意不包括6
x = range(0, 10, 3) #[0, 3, 6, 9]
x = range(0, -5, -1) #[0, -1, -2, -3, -4]
x = range(0) #[]
x = range(1, 0) #[]
x = range(1, 0, -1) #[1]
python沒有c-like的for(;;) 寫法,用range來取代。
使用range來快速產生串列
在python稱為 List Comprehension,我翻成「串列析解」,說穿了就是用遞迴的方式快速建立串列,不會很難,這個只要知道就好。
a1 = [i for i in range(5)] #[0, 1, 2, 3, 4] <== 注意不包括5
a2 = [i for i in range(0,10,2)] #[0, 2, 4, 6, 8] 產生偶數
a3 = [i for i in range(1,10,2)] #[1, 3, 5, 7, 9] 產生奇數
a4 = [i for i in a3 if i > 3] #[5, 7, 9] 限制條件
planet = ['mecury','venus','earth','mars','jupiter']
# 首字大寫
a5 = [i.title() for i in planet ] #['Mecury', 'Venus', 'Earth', 'Mars', 'Jupiter']
# 串列中有字元'e'的前面加上 'the '
a6 = ['the ' + i for i in planet if 'e' in i] #['the mecury', 'the venus', 'the earth', 'the jupiter']
因為以後可能用 numpy 來取代,所以太複雜的需要再查即可。
pass
啥都不幹的時候用,例如你啥都不幹到不能空在那的時候,就寫個 pass,請看 match...case 3的範例
break, continue
迴圈中的控制,和其它語言相同
raise, try...except
python中沒有 try... catch...finally,但有差不多的 try...except錯誤嘗試控制
m = 0
try:
print(n/m)
except:
print('除以0錯誤')
結果:
除以0錯誤
下一篇寫函數、類別和其它的重點整理
結論
python的指令和功能不只這些,只是我做了簡要的整理,對於有其它程式基礎的人,希望這篇會對你有幫助。
有了以上對python的背景知識,接下來就可以玩點什麼了。