一小時Python入門-part 1

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 執行看看,不過此舉較不推薦新手用。

 可以看到Terminal印出hello world字樣了

 

2. 下載使用Jupyter Notebook

如果要更方便一點的話可以下載 Jupyter,也是 Python 的 IDE,包含了編輯器和編譯功能,非常適合 Python 的學習噢!安裝方式請參考:http://www.largitdata.com/course/29⋯⋯

 

Python基本語法與練習

好了,來實作看看吧!打開 Jupyter Notebook 應用程式、跳出  Jupyter Notebook 的編輯頁面就可以來撰寫我們的程式碼啦。

python1.jpg

 

1. Print:永遠是跟世界打聲招呼的第一個程式

print語法是在print函式中放進你要印的東西,比如 print(我要印這個)。說聲 Hello World,跟程式的世界打聲招呼吧!

python2.jpg
第一個跟世界打招呼的程式!

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 (浮點數)。
py3.jpg

數值可以做運算:

py4.jpg

也可以使用各種你知道的函數:

但不同的形態運算要注意,不要把字串和數值加在一起、否則會產生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()印出來的東西是字串, 記得轉型噢!)

py5.jpg

4. If-Else 日常的邏輯判斷

別說你沒用過 if-else 函數式,我們每天都在面臨 if else 的抉擇──如果(if) 百貨公司周年慶到了: 那就是大採購的時間啦! 否則(else)我們就晚點再買。

照樣造句一下還有──如果 (if)手機快沒電: 我就乖乖回家充電! 否則 (else) 我就繼續抓寶可夢。

來看一下 if-else 語法解說。if 寫完之後接冒號、下一行縮排後開始寫要做什麼事情。注意 else 是否則的意思,就不用再寫一次條件了。

但如果我們不只有兩層 (周年慶就去買東西、否則就等下次),可能有好幾層條件呢?

比如: 如果我們平板電池的電量還很高、就去抓寶可夢;電池電量快沒了、就乖乖回家;如果電池電量普普通通、看看小說就好。

把這件事情用Python表達出來吧!

py6.jpg

電池只有50,在30~80之間,因此看看小說就好!

if-else主要用在邏輯運算的判斷上:

  • > 大於
  • < 小於
  • >= 大於等於
  • <= 小於等於
  • == 等於
  • !== 不等於

或是布林值(Boolean):

  • true 真的
  • false 假的
  • and 且
  • or 或
  • not 非

不小心買到Samsung Note 7、聽說電池快沒電時容易有爆炸的風險,怎麼辦?! 利用邏輯運算來提醒我們這個危機吧!

py7.jpg

● 小練習

寫一支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噢!)

py8.jpg

進階版: 如果不希望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之中。因此能改成:

py9.jpg

 

● 小練習

現在有一個 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]startend都可以省略不寫
  • 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教學

> 內文只是為了初學者而採簡單的舉例,但之後還是要養成好的命名習慣噢~
會在大家懂了程式概念之後,之後來發一篇講如何命名變數。