iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 3
1
AI & Data

機器學習理論與實務 with Python系列 第 3

[Day - 03] - Python 基礎語法教學 Part 1

Python 基礎語法教學 Part 1

昨天把環境搞定了,今天就讓我們來學學一些基本語法吧!
基本上這幾篇只會帶簡單的觀念,如果是初學程式的朋友,想要學得更深入,可以搭配以下資源:
Tutorial Points - Python 3教學
官方教學

Zen of Python

在正式學習Python語法之前,讓我們新增一隻檔案zen-of-python.py
並在裡面放入以下程式碼:

import this

執行後你應該會看到終端機輸出:

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

這段話是所謂的Zen of Python,翻成中文大概就是Python的禪意吧 XD
其實他是一個有點像是coding rule的玩意,簡單來說就是希望你寫Python時應該抱有的精神。
小弟認為裡面有幾句很棒,特此節錄與大家分享

Readability counts. => 可讀性很重要,除了電腦,你的同事 (還有未來的你)也要讀你的程式碼!
Errors should never pass silently. => 再小的錯誤與例外,也要好好處理,切勿養虎為患。
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea. 
=> 一個難以解釋清楚的實作? 那真是太糟啦! 一個可以輕易解釋的實作? 嘿! 這說不定是個好實作呢!

Output

以前我在研究所教學弟妹Python的時候,問了他們一句話:

我:你覺得學一門程式語言,第一件事要學什麼?
學弟:bang~數啦!
我:應該是Hello World才對吧 XD

Python的輸出非常簡單,即為print函式,在昨天最後我們也有用到。
今天我們來看個稍微不一樣的例子:

print('Hi, my name is', 'Simon')

從上述例子可知,print這個函式可接受任意個數的參數,並在印出的時候用空白隔開他們。

變數

變數在程式中,扮演中儲存資料的角色。將資料儲存下來,就可在需要的時候拿出來用。
在程式中,每個變數會有自己的型別。那型別是什麼呢? 簡單來說,型別決定了這個變數可用來儲存什麼樣格式的資料,並且定義了相對應的操作。
簡單舉例,Python中常見的基本型別有:int (整數)float (浮點數)str (字串)
從上述你大概可以知道,如果要今天存放年齡,整數會是不錯的選擇。
身高 & 體重? 浮點數看來不錯。
名字? 字串是不二之選!
不過在Python中,宣告變數並不用事先給定型別,他會依照你給他的初始值來決定變數的型別。

讓我們來看看範例,了解Python中的基本型別吧!

iv = 10
fv = 12.3
cv = 3 + 5j
sv = 'hello python'
bv = True
nv = None

print(iv, fv, cv, sv, bv)
print(type(iv))
print(type(fv))
print(type(cv))
print(type(sv))
print(type(bv))
print(nv)
print(isinstance(sv, str))

上述的例子有幾個需要注意的地方

  1. 我們可用=來給定變數初始值
  2. 我們可用type這個函式以及print來得知變數的型別
  3. Python的空值 (沒有存放任何東西)是以None來表示
  4. 如果想要確認某變數是否為特定型別的時候,可用isinstance這個函式

註解

接著要教大家如何在Python中寫註解。
註解雖然會出現在程式碼裡面,但是並不會被執行,是個很適合為程式新增說明的手段。
如果不好好寫註解的話,肯定會被一個月後的自己跟同事討厭呢!
在Python中,寫在#後面的文字,都會變成註解。

# 這個變數用來儲存我的名字
name = 'Simon'

User Input

有時候程式也需要與外界的使用者互動,來接收一些外部指令或訊息。
這時候你可以用input這個函式,他會回傳外部送來的訊息。
執行下方的程式,並在終端機輸入你的名字,看看會發生什麼事

name = input('Hello, what is your name?  ')
print('Hi, ', name)

數學運算子

接下來我們來介紹用來做數學運算的運算子,看看如何在Python完成數學工作

運算子 功能
x + y X加Y
x - y X減Y
x * y X乘Y
x / y X除以Y
x // y X除以Y,只取整數解
x % y 求X除以Y的餘數
x ** y X的Y次方

流程控制(if...else)

寫程式的時候,很常遇到某些情況,如:達成條件要做A,未達成要做B。
這時候我們就可以用if...else來做到這件事情。
假設我們有一個學生的考試成績,就可以根據成績的不同來印出評語:

grade = 90

# there's no ()
if grade >= 90:
    print('Excellent!')
elif grade >= 60:
    print('Good enough!')
else:
    print('Loser!')

上述的例子中,有幾件事需要特別注意:

  1. 一個if...else區塊,只要其中一個條件成立,程式就會離開這個區塊。
  2. 條件不需要放()之中
  3. 每個條件後面記得要有:
  4. 條件成立要做的事情,要以縮排的方式放在條件句底下
  5. else if在Python寫作elif

補充:
習慣其他語言的人,可能會使用{}來定義一個程式區塊,但是Python中,程式區塊是用:以及縮排來定義的。這點千萬要切記啊! 筆者剛用Python每天都少寫:,平白無故花了很多時間debug...

比較運算子

學了if...else之後,要來教教大家怎麼樣下各式各樣的條件。

運算子 效果
x < y X是否小於Y
x <= y X是否小於等於Y
x > y X是否大於Y
x >= y X是否大於等於Y
x == y X是否等於Y
x != y X是否不等於Y

用上述的比較運算子,我們即可寫出各種不同的條件來控制程式的流程,有空一定要自己試試看喔!

布林運算

學了怎麼樣寫出各式各樣的條件後,你會不會想到:

如果我想寫出複合式的條件怎麼辦?

那這樣時候我們就要依靠布林運算子了:

運算子 效果
a or b A或B其中一個條件成立就回傳True
a and b A或B兩個條件都成立才回傳True
not A 如果A為True,則回傳False,反之則回傳True

應用這些運算子,我們就可以寫出更多有趣的條件,如:

h = 180
w = 85
grade = 80

# 身高超過175或是體重超過80,看起來就很大隻
if h > 175 or w > 80:
    print('big dude')

# 成績高於70但是不高於90,就是個普通學生
if grade > 70 and grade < 90:
    print('noraml')

小結

今天我們介紹了Python最基礎的語法,從基本I/O、基本變數到流程控制,都還算是程式中最簡單的部分,明天開始我們將要進入比較難的進階型別,請大家敬請期待!


上一篇
[Day - 02] - Python環境架設
下一篇
[Day - 04] - Python 基礎語法教學 Part 2
系列文
機器學習理論與實務 with Python8

1 則留言

0
蛤欣
iT邦新手 5 級 ‧ 2018-10-19 14:18:16

學弟妹來報到了 XD

我要留言

立即登入留言