邏輯及流程控制
變數
在開始講流程控制之前,要先來看一下在 Python 的變數。
Python 的變數有幾項特點以及有趣的使用:
- 不用宣告,可以直接用
x = "abc"
- 變數名稱沒有型態
x, y, z = 1, 2, 3
可一口氣指定多個變數x, y = y, x
把 x 跟 y 的值對調x, y, z = "abc"
會得到 x = "a"、y = "b"、z = "c"x = y = z = "abc"
,x、y、z 都是abc
命名規範
- 最好取有意義且相關的
- 開頭只能以底線或英文字母
- 小心保留字
保留字:
and | as | assert | break | class | continue | def |
del | elif | else | except | exec | finally | for |
from | global | if | import | in | is | lambda |
not | or | pass | raise | return | try | |
while | with | yield |
如果這樣,那就這樣,不然就那樣.. 的 if-else
所謂的邏輯控制,說穿了大概就是「如果下雨,就去吃麥當勞,不然就去吃肯德雞」之類的敘述罷了。如果我們把這段語法改寫成程式碼的話:
weather = "sunny"
if weather == 'rainy':
print "go to M"
else:
print "go to KFC"
如果你曾經學過別的程式語言,例如 C/C++/PHP,你可能一下子看到這樣的程式碼會不太習慣。Python 的 code block 不需要大括號,只要用整齊的縮排就可以了。至於你是要縮排 2 格空白、4 格空白都可以,只要排整齊就好了。另外,每行的行末也不需要分號做為結束。
Python 的變數不需要特別宣告,在做邏輯判斷的時候,如果不會影響語意的話,也是不需要小括號的。假設我們原來這段程式碼改用 C-like 的程式碼來改寫的話,可能會長得像這樣:
var weather: String = "sunny";
if (weather == "rainy") {
print("go to M");
} else {
print("go to KFC");
}
上面這段程式碼只是舉例,不一定完全正確。不過要表達一樣的意思,用 Python 就是可以讓你的程式碼變得簡單很多,至少你可以少敲好幾下鍵盤,也因為 Python 的程式碼強制一定要縮排排整齊,所以你也不用擔心程式碼風格會差很多的問題(當然有的人就是喜歡用奇技淫巧..硬是要寫得跟別人不同的也大有人在)。
有if..else..
,那當然也要來一下 elseif
之類的語法,不過 Python 的 elseif 是用 elif
:
weather = "sunny"
if weather == 'rainy':
print "M"
elif weather == 'not good':
print "Stay at home"
else:
print "KFC"
switch?
你知道當程式的判斷開始越來越多的時候,學校老師或是教課書上就會教我們用 switch
之類的語法來處理,不過,你可能會很訝異,Python 沒有 swtich 之類的語法的,它就是用一大串的if..elif..else..
來處理。
不優美嗎? 我覺得還好。反正 Python 程式碼的縮排很清楚,看起來也不會多混亂 :)
註解
Python 的註解有兩種,單行註解跟多行註解。單行的這樣用:
# this is comment in python
多行的這樣用
"""
this is comment
this is comment, too!
many comment..
"""
中文字..會出現錯誤!!
如果你的檔案裡有用到非英文字元的話,請在檔案最前面加上一行:
# encoding: utf-8
這樣你的程式執行起來才不會跳出 SyntaxError
,誰叫電腦跟程式語言不是中國人發明的..
輸入/輸出
這個我們在寫一些 console 的應用程式的時候常會用到,前面我們已經用過print
了,不過接下來我們來試著做個可以跟使用者互動的簡單小程式:
print "Hello, how old are you?"
age = raw_input()
if age >= 18:
print "You're an Adult already!"
else:
print "kid, go back to school!"
這其實也是個沒什麼實戰用途的程式碼範例,也沒有很嚴格的檢查輸入值的範圍,不過可以從這邊看到在 Python 的輸入/輸出大概是怎麼處理的。另外一樣在處理輸入的,還有兩個稍微要提的,分別是raw_input
跟get_pass模組
。也許你會好奇input
跟raw_input
的差別? 比較明顯的差別是在於數字的處理,如果你輸入20+3
,你會得到 23,但如果用的是raw_input
的話,則是得到20+3
這個字串。
不管是input
或是raw_input
,我們在輸入的過程中都會被旁邊的人看光光,如果你不想你在輸入密碼的時候全部都秀在畫面上,你可以使用get_pass
這個內建的模組。我們直接在 shell 裡試試看:
>>> import getpass
>>> getpass.getuser()
>>> your_pw = getpass.getpass("please input your password: ")
please input your password:
這樣你打的字就應該不會被看到了。
接下來,我們要來把這些程式碼包成 method(方法)..