邏輯及流程控制

變數

在開始講流程控制之前,要先來看一下在 Python 的變數。

Python 的變數有幾項特點以及有趣的使用:

命名規範

  1. 最好取有意義且相關的
  2. 開頭只能以底線或英文字母
  3. 小心保留字

保留字:

and as assert break class continue def
del elif else except exec finally for
from global if import in is lambda
not or pass print 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_inputget_pass模組。也許你會好奇inputraw_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(方法)..