Python 是一個簡潔易讀的語言,學習者幾乎可以立刻上手,也適用於大量的商業應用上。目前已超越 C/C++、Java,成為各大學課程中的主流入門程式語言,美國 Top 10 Computer Science (電腦科學) 系所中便有 8 所採用 Python 作為入門語言。
今天就讓我們來試著寫寫看 Python 這個好玩的語言,並利用學習結果寫個簡單的爬蟲程式,能夠在 FB 自動發文、自動洗讚,統計出朋友的留言按讚數!
環境設置
首先可以至官網下載下載Python: https://www.python.org/ 。下載完成後,你將獲得: Python直譯器與IDLE (Python的IDE)。身為一個IDE、該有的都有了,只是由於有點醜,所以大家都不愛用。
接下來如何執行程式有兩個選項:
1. 使用主機Terminal
讓我們找一個寫程式用的文字編輯器: Notepad++、Sublime Text、Vim、Atom… 記事本也行,寫完程式碼後可以打開 Terminal 、打上 python 檔名.py 執行看看,不過此舉較不推薦新手用。
2. 下載使用Jupyter Notebook
如果要更方便一點的話可以下載 Jupyter,也是 Python 的 IDE,包含了編輯器和編譯功能,非常適合 Python 的學習噢!安裝方式請參考:http://www.largitdata.com/course/29⋯⋯
Python基本語法與練習
好了,來實作看看吧!打開 Jupyter Notebook 應用程式、跳出 Jupyter Notebook 的編輯頁面就可以來撰寫我們的程式碼啦。
1. Print:永遠是跟世界打聲招呼的第一個程式
print語法是在print函式中放進你要印的東西,比如 print(我要印這個)。說聲 Hello World,跟程式的世界打聲招呼吧!
第一個跟世界打招呼的程式!
print的內容可以是變數(variable): print(a),數字(init): print(1234),或是字串(string): print(‘abc123’)。
2. Variable (變數):一切TypeError的泉源
上面提到了變數,但這是什麼意思呢? 其實就是幫資料取個名字、把資料儲存起來。比如: 變數 = 資料,a = 123。當我們輸入a、就會找到123。
變數雖然能儲存資料,但資料有很多種類型、所以就會有資料型態(Type)。舉例來說:
- a = 123 , type(a)會告訴我們 init (整數)。
- b = ‘456’ , type(b)會告訴我們 str (字串)。
- c = 8.70 , type(c)會告訴我們這是一個 float (浮點數)。
數值可以做運算:
但不同的形態運算要注意,不要把字串和數值加在一起、否則會產生TypeError。
記得學會看錯誤訊息再回去看自己寫錯了什麼。
那該怎麼辦呢?
別怕別怕,若要運算則需要做型態轉換,可以用 int(), str(), float() 來轉換變數型態。可以看到下圖,int() 將字串’456’轉成整數、str() 將整數 123 轉成字串。
謹記:「Error都是暫時的,沒有解不掉的Bug,莫忘心靈祥和。」
3. Input:讓使用者輸入資料唄
這邊我們使用的是Python 3的環境,使用的是 input;如果環境是Python 2的朋友注意是用 raw_input噢,Python 2的input有別的意義。
input的功能是讓使用者所有輸入的資料會被當成字串儲存起來,需要時再作轉型。舉例而言:
- a = input() : 它會等你輸入,並以字串(string)的形式存入 a 這個變數中。
- b = input(‘Your Name: ‘) : 在螢幕上會出現 ’Your Name: ’的提示,並把資料以字串(string)形式存入 b 這個變數中。
記得這個數字289是字串的形式喔~
● 小練習
請寫一支Python程式,能讀取兩個整數,並把他們的四則運算印出來。(提示: 用input()印出來的東西是字串, 記得轉型噢!)
4. If-Else 日常的邏輯判斷
別說你沒用過 if-else 函數式,我們每天都在面臨 if else 的抉擇──如果(if) 百貨公司周年慶到了: 那就是大採購的時間啦! 否則(else)我們就晚點再買。
照樣造句一下還有──如果 (if)手機快沒電: 我就乖乖回家充電! 否則 (else) 我就繼續抓寶可夢。
來看一下 if-else 語法解說。if 寫完之後接冒號、下一行縮排後開始寫要做什麼事情。注意 else 是否則的意思,就不用再寫一次條件了。
但如果我們不只有兩層 (周年慶就去買東西、否則就等下次),可能有好幾層條件呢?
比如: 如果我們平板電池的電量還很高、就去抓寶可夢;電池電量快沒了、就乖乖回家;如果電池電量普普通通、看看小說就好。
把這件事情用Python表達出來吧!
if-else主要用在邏輯運算的判斷上:
- > 大於
- < 小於
- >= 大於等於
- <= 小於等於
- == 等於
- !== 不等於
或是布林值(Boolean):
- true 真的
- false 假的
- and 且
- or 或
- not 非
不小心買到Samsung Note 7、聽說電池快沒電時容易有爆炸的風險,怎麼辦?! 利用邏輯運算來提醒我們這個危機吧!
● 小練習
寫一支Python整數機,第一步讓使用者輸入想要做的符號運算,比如「+, -, *, /」,第二步讓使用者輸入’整數1’和 ‘整數2’,最後讓這兩個整數進行運算。如果輸入的運算符號不是「+, -, *, /」,便輸出「錯誤」。
5. For Loop 轉圈圈吧哈姆太郎
如果要把0到9的數字印出來,應該怎麼做呢?
嗯當然你可以這樣做…
但如果今天是要從0印到100呢? (´・ω・`) …
我們之所以寫程式,就是為了要讓程式能自動化地幫忙做一些事情,這樣顯得太沒有效率了。因此在這邊我們需要寫一個「迴圈」(Loop)。首先來介紹一個最基礎的Python迴圈「For Loop」。
比起痛苦地寫十行print,引進For迴圈後、區區兩行便能解決了:
不是很看得懂程式碼的意思嗎? 別緊張,這邊來解釋一下這個式子的涵義。若要枚舉出從0到n-1的數字,寫法是:
for [變數名稱] in range(n): (縮排) print([變數名稱])
來試試看:
在這裡的n=10,是不是把0~9 (n-1)的數字都印出來了呢?
到底range又是什麼意思呢?
事實上 range(n) = range(0, n),簡單來說就是個產生器,你可以在這個range範圍中拿資料、拿完到n-1為止。以range(3)為例,第一次拿到資料0、第二次拿到資料1、第三次拿到資料2,然後就結束了。
讓我們重新看一下for函數結構:
for [變數名稱] in range(範圍, 比如從數字X到Y): (縮排) 做一件事 (縮排) 做一件事
瞭解的話,就讓我們來做個小練習吧!
● 小練習
請輸出一個九九乘法表。(提示1: for loop裡面也可以有第二個for loop噢!)
進階版: 如果不希望print出來的結果換行且要有空格,可以使用end=’ ’;若要再換行可使用end=’\n’。
事實上range的數列是有間距的喔!
range 的結構是:range(起點, 終點, 間距),其中的間距預設為1 、比如 range(0, 6) = range(0, 6, 1) 。代表從 0 到 5,每次加 1 的意思。
分別印出:
(1) 從1到10、每次加2的數列;
(2) 從10到2、每次-3的數列 吧!
● 小練習
請做出一支能猜數字的程式:每次讓使用者猜一個整數,若猜對就輸出Bingo;使用者最多可以猜3次。(提示: Bingo後可以使用break來離開迴圈)
6. List:能無限儲存資料的格子
想像一下,若今天有三筆資料要計算時,我們會這樣寫:
a = 1 b = 2 c = 3
… 那如果你有成千上萬筆資料呢?
再想像一下,如果不知道使用者要輸入多少資料又要怎麼辦呢?
in = input() a = in[0] b = in[1]
這樣真的行嗎…
「神說要有了List,所以有了List。」- 來自深海大鳳梨裡的神祕訊息。
繼續運用你的想像力!我們現在有個異次元裡的櫃子,它有無限個格子,第一格可以放東西、第二格也可以放東西…以此類推。
櫃子裡可以放任何東西,我們會用一個數字代表東西放在櫃子中的第幾層格子,這個數字就叫做 Index (索引)。
把櫃子的概念換成 Python 的 List 語法,就會變成:放在第 0 層的變數、放在第 1 層的變數… 這個數字就是 Index(索引),而變數就是我們塞進去的資料。
一個Python的List長相如下,以中括號[] 包起來、逗號, 分隔:
a = ['Lynn', 0.87, 1234, True]
這裡的 a 就是一個 List,第 0 格放的是 Lynn 這個字串、第 1 格放的是 0.87 這個浮點數、第 2 格放的是 1234 這個整數、第 3 格放的是 True 這個布林值。
有了格子的概念後,我們可以使用 a[第幾格] 來取出變數,比如 a[0] 代表’Lynn’、a[3] 代表True。可以看到由於 a[4] 並不存在,因此會出現 IndexError的警示。
要如何知道一個List有多長呢? 我們能使用 len([list變數名稱])。
a = [1, 3] len(a) = 2
在拿到 List 的長度後,讓我們能來玩一點變化吧!比如 List 加上上面教學的 For Loop 看看會發生什麼事:
若要更簡潔一點的話,由於 in 這個關鍵字有「在… 之中」的意思,in range(0, 3)代表在0~2之中。因此能改成:
● 小練習
現在有一個 list a = [1, 3, 5, 7, 9],請對每一個元素都平方後印出來,且須將 a 也變成 [1, 9, 25, 49, 81]。
來玩玩更多list的操作吧!
- 建立一個空的list: a = list() 或是 a = []都可以
-
動態增加元素:
- list.append(x): 把變數x塞到list的最後面
- list.insert(i, x): 把變數x塞到i這個位置上
- list.pop(): 把list的最後一格丟掉
- list.pop(i): 把list的第i格丟掉
- list.remove(x): 會把第一個出現的變數x拿掉
- list.clear(): 把list內的資料全部清光光
-
與常見函數的結合:
- max(list): 找出list中最大值
- min(list): 找出list中最小值
- sum(list): 找出list數字總和
● 小練習
五次數學段考的成績分別為10、30、50、70、90分,算出平均後,老師發現大家考太爛、只好將成績開根號再乘上10 (提示: 成績**0.5*10),再算出一個新平均。
請印出: 1. 五次成績; 2. 平均成績; 3. 五次新成績; 4. 新分數的平均。
以為就這樣結束了嗎? List 還有切片 (Slice) 的功能哦大大!
Python 的 slice 功能讓我們能拿出 List 櫃子的一部份。
list[start: end] #拿到 list 的start ,start+1, start+2, ..., end-2, end-1
針對slice語法,讓我們深入介紹一些細節部分:
- list[start: end],start和end都可以省略不寫
- start的預設為0
- end的預設為len(list)
- liest[ :end]代表 0~end-1
- list[start: ]代表start~len(list)-1
- list[ : ]代表0~len(list)-1
● 小練習
來辦場Party吧! 輸入十個整數、存入一個名為people清單中 (表示我們的宴客人數);之後會有五次詢問,每次會輸入清單開始和結束的位置,再輸出從開始到結束位置的總和。
還沒結束喔!下一篇【一小時Python入門介紹-part 2】還有Dict語法與FB狂讚士專案教學,別在這邊就停住了啊啊啊~
- 備註:
> 內文資料參考: 資訊之芽與清大新生營Python教學