變數
在開始講流程控制之前,要先來看一下在Python的變數。
Pytho的變數有幾項特點以及有趣的使用:
- 不用宣告,可以直接用 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
所謂的邏輯控制,說穿了大概就是「如果下雨,就去吃麥當勞,不然就去吃肯德雞」之類的敘述罷了。如果我們把這段語法改寫成程式碼的話:
1 2 3 4 5 6 | |
如果你曾經學過別的程式語言,例如C/C++/PHP,你可能一下子看到這樣的程式碼會不太習慣。Python的code block不需要大括號,只要用整齊的縮排就可以了。至於你是要縮排2格空白、4格空白都可以,只要排整齊就好了。另外,每行的行末也不需要分號做為結束。
Python的變數不需要特別宣告,在做邏輯判斷的時候,如果不會影響語意的話,也是不需要小括號的。假設我們原來這段程式碼改用C-like的程式碼來改寫的話,可能會長得像這樣:
1 2 3 4 5 6 7 | |
上面這段程式碼只是舉例,不一定完全正確。不過要表達一樣的意思,用Python就是可以讓你的程式碼變得簡單很多,至少你可以少敲好幾下鍵盤,也因為Python的程式碼強制一定要縮排排整齊,所以你也不用擔心程式碼風格會差很多的問題(當然有的人就是喜歡用奇技淫巧..硬是要寫得跟別人不同的也大有人在)。
有if..else..,那當然也要來一下elseif之類的語法,不過Python的elseif是用elif:
1 2 3 4 5 6 7 8 9 10 | |
switch?
你知道當程式的判斷開始越來越多的時候,學校老師或是教課書上就會教我們用switch之類的語法來處理,不過,你可能會很訝異,Python沒有swtich之類的語法的,它就是用一大串的if..elif..else..來處理。
不優美嗎? 我覺得還好。反正Python程式碼的縮排很清楚,看起來也不會多混亂 :)
註解
Python的註解有兩種,單行註解跟多行註解。單行的這樣用:
1
| |
多行的這樣用
1 2 3 4 5 | |
中文字..會出現錯誤!!
如果你的檔案裡有用到非英文字元的話,請在檔案最前面加上一行:
# encoding: utf-8
這樣你的程式執行起來才不會跳出SyntaxError,誰叫電腦跟程式語言不是中國人發明的..
輸入/輸出
這個我們在寫一些console的應用程式的時候常會用到,前面我們已經用過print了,不過接下來我們來試著做個可以跟使用者互動的簡單小程式:
1 2 3 4 5 6 | |
這其實也是個沒什麼實戰用途的程式碼範例,也沒有很嚴格的檢查輸入值的範圍,不過可以從這邊看到在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(方法)..