Professional Documents
Culture Documents
文
臺師大通識。資料科學與程式設計
授課老師:蔣宗哲
師大資工系
tcchiang@ieee.org
資料科學與程式設計。臺師大通識。 2020 春
程式語言
學習程式語言的目的是為了和電腦溝通,
能指揮電腦進行我們指定的運算流程。
隨著人工智慧技術的進步,雖然人類已能使用
自然語言指揮電腦(例: Siri ),但其用途和
規模仍有限。
學習程式語言和學習自然語言相似,涉及使用
單字、句型和語意。
2
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
程式語言
以指定文法和電腦溝通
顯示 NTNU!
????????????
可以請你在畫面上列印
NTNU 嗎 ?
3
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
編寫程式源碼
編寫程式源碼 (source code) 就是將我們希望電腦執行
的運算流程,依循某種程式語言的文法規定撰寫出來。
一般來說,我們會將程式源碼存成純文字格式的檔案。
Python 源碼通常以 .py 作為副檔名。
4
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
執行程式
我們目前學習的程式語言多屬「高階語言」,
需要透過中介程式將我們的程式源碼翻譯成電
腦指令,再由電腦執行。
my_first_program.py
010100110
print('NTNU')
https://zh.wikipedia.org/wiki/File:Python.svg 5
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
執行程式
使用 Google 翻譯將英文翻譯成中文
6
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
執行程式
正確的英文句子被翻譯成正確的中文句子
錯誤的英文句子被翻譯成怪異的中文句子
7
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
執行程式
文法正確但語意錯誤的程式源碼,直譯後得到不符預期的執行結果
文法與語意均正確的程式源碼,直譯後得到符合預期的結果
8
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
安裝 Python IDLE 開發工具
https://www.python.org/downloads/
9
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
安裝 Python IDLE 開發工具
10
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
安裝 Python IDLE 開發工具
點選 IDLE
鍵入 idle
11
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Hello World 程式
開新源碼檔案 撰寫程式碼
存檔 存檔成功
12
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Hello World 程式
翻譯並執行程式碼內容 ( 熱鍵: F5)
同意存檔後執行 (OK)
13
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Hello World 程式
成功執行,並在 Shell 視窗列印出 Hello World 字樣。
14
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Hello World 程式
正確的程式
print('Hello World')
錯誤的程式 少了一對單引號
P 誤寫成大寫
少了一對小括號
程式沒有向左靠齊
15
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
算術運算
程式中經常需要計算數值,我們先來看看如何
在 Python 作算術運算。
16
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
算術運算
執行方法一:直接運算 執行方法二:編寫檔案再執行
17
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
算術運算
運算次序由高至低
次方
乘/除/餘
加/減
18
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
算術運算
除法、整數與小數(浮點數)
19
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
投影片中若出現此圖形,代表
進階內容,自行選讀。
算術運算
取餘數: Python vs. C++
20
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
互動運算
獲取使用者資料並運算
如何獲取資料?
如何儲存資料?
如何顯示運算結果?
21
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
變數
程式的資料存放在記憶體中。
變數代表某一塊記憶體空間,透過有意義的名稱,
方便我們指稱某一塊記憶體(或其存放的資料)。
x = 10
print(x)
y = 20 10
print(x, y, x+y) 10 20 30
使用 sep 參數可傳入列印時的分隔字串,例:
print(x, y, sep='QQ')
列印出 10QQ20 22
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
變數
預備測驗題:請問以下 Python 程式的輸出為何?
答對率 33/57
a = 10
b = 10
a = a+b
print(a+b) 30
23
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
讀入資料
input() 函式可以取得使用者從鍵盤輸入的資料。
使用變數來承接 input() 的結果,否則 input() 就只有
輸入,但程式無法繼續使用輸入的內容。
x = input() 198
print(x) 198
灰色字代表使用者的鍵盤輸入
黑色字是程式的回應
要求使用者輸入時,應儘量給予清楚的提示。
在 Python 中,以一對單引號 ' ' (或雙引號 " " )包起
來的資料稱為字串。
input() 函式可以傳入提示字串。
x = input(' 請輸入一個整數值 > ') 請輸入一個整數值 > 198
print(x) 198
24
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
資料型態
資料型態影響了資料表示法、記憶體佔用空間
、合法的運算子以及運算結果。
在程式碼中
12 是整數型態 (int)
程式用語
整數 : integer
小數 / 浮點數 : floating-point number
12.0 是小數型態 (float) 字串 : string
資料轉型 以下三個程式都是相同的執行結果。
加法程式
請輸入第一個整數值 > 33
請輸入第二個整數值 > 44
答案是 77
思考程式流程:
列印程式標題 print(' 加法程式 ')
輸入第一個整數並儲存 x = int(input(' 請輸入第一個整數值 >
'))
輸入第二個整數並儲存 y = int(input(' 請輸入第二個整數值 >
計算和 '))
記得轉換成整數 int total = x+y
print(' 答案是 ', total)
輸出結果
27
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
一次輸入多個資料
前面說過, input() 函式以字串型態取得使用者輸
入的資料。
Python 的字串型態擁有一個操作 split() ,可以將
字串以空白字元斷開成串列。
Python 可以使用解開的語法來取得串列中的資料。
如果你覺得太複雜可以先無視本頁,未來我們還會再講。
28
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Snakify 線上練習平台
未來我們一部份的作業會以 Snakify 平台來指派。
https://snakify.org/
29
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Snakify 線上練習平台
登入時請選 I have a teacher 。或直接點選此連結
底下的 Teacher's email 請填
ptm108_12365@ntnu.edu.tw
注意事項
•請以師大學生信箱註冊,勿使用私
人信箱。
•務必填寫正確的教師信箱,
否則我無法看見你的作答狀況,作
業可能因此得 0 分。
30
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Snakify 線上練習平台
點選題目
執行程式
撰寫程式
亦可輸入自己的測試資料
測試所有資料
a = int(input())
b = int(input())
c = int(input())
print(a + b + c)
32
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Snakify 線上練習平台:作業一
提示
Hi John 、 Hello, Harry! 牽涉到字串輸出:
print('Hi','John') 會列印出 Hi John 。
print('Hi'+'John') 會列印出 HiJohn 。
Hi John 的範例解答
print('The next number of the number ' + str(a) + ' is ' + str(a+1))
33
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Snakify 線上練習平台:作業一
提示
Two time stamps 計算兩個時刻相差的秒數:
都轉換成從 0:00:00 開始的秒數再可相減即得答案。
整數除法?除以多少?加多少?先加再除?先除再加?
34
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
電腦的決策
臺師大通識。資料科學與程式設計
授課老師:蔣宗哲
師大資工系
tcchiang@ieee.org
資料科學與程式設計。臺師大通識。 2020 春
索引頁
平均的危險
美好的如果
關係運算子
如果還有如果
如果不只兩種可能
邏輯運算子
如果與分類
Snakify 作業
更多範例
36
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
平均的危機
數值資料分析最常見的是統計分析,例如計算次數
、求取極值、平均值和標準差等等。
我們都知道平均值是總和除以個數:
avg = total/count 這裡我們不用 sum 作為變數名
稱(可以用但不建議),因為
sum 是 Python 內建函式名稱。
讓我們來寫個求平均的程式:
列印程式標題
輸入總和
輸入個數
計算平均(即總和 / 個數)
輸出結果
37
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
平均的危機
求平均的程式
print(' 計算平均的程式 ')
total = int(input(' 請輸入總和 > ')) 別忘了 input() 得到的資料是字
串型態,要用 int() 轉換成整數
count = int(input(' 請輸入個數 > ')) 喔。
print(' 答案是 ', total/count)
你會如何測試你的程式?
測試案例一 測試案例二 測試案例三
計算平均的程式 計算平均的程式 計算平均的程式
請輸入總和 > 100 請輸入總和 > 42 請輸入總和 > 100
請輸入個數 > 5 請輸入個數 > -8 請輸入個數 > 0
答案是 20.0 答案是 -5.25
Traceback (most recent call last):
File "divide by zero.py", line 4, in <module>
print(' 答案是 ', total/count)
ZeroDivisionError: division by zero
38
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
平均的危機
除以零的錯誤 你看人家小算盤那麼聰明
電腦在遇到除以零的運算時,通常都會以某種型式
回報錯誤。
我們能否修改程式,使得:
如果個數為正時,計算平均;
如果個數不為正時,提示使用者輸入錯誤。
程式 程式
開始 結束
是
使用者輸入 個數 計算平均
為正
否
提示錯誤
39
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
生活中的流程圖
http://etds.lib.ntnu.edu.tw/cgi-bin/gs32/gsweb.cgi/ccd=qDv7GX/fqasearch?menuid=gsfqa
40
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
美好的如果
大多數的程式語言都有個「如果」的句型
中文
如果個數為正,計算並列印平均;
否則,提示使用者輸入錯誤。
英文
If the count is positive, calculate and print the average;
otherwise, show an error message.
41
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
除以零的錯誤也可以利用
美好的如果
「例外處理」來解決。
Python 的「如果」句型
print(' 計算平均的程式 ')
total = int(input(' 請輸入總和 > '))
count = int(input(' 請輸入個數 > '))
if count>0:
print(' 答案是 ', total/count)
else:
print(' 無法計算 - 個數需為正值 ')
程式 程式
開始 結束
是
使用者輸入 個數 計算平均
為正
否
提示錯誤
42
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
美好的如果
句型剖析
別忘了冒號喔!
if 條件式 :
條件為真時的動作(可以不只一行) 假 真
else:
條件不為真的動作(可以不只一行)
句型範例
if count>0:
print(' 答案是 ', total/count)
else:
print(' 無法計算 - 個數需為正值 ')
43
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
美好的如果
句型排版格式規定
Python 對於「如果」句型有嚴格的排版格式規定,若
不符合規定,會出現 expected an indented block 的
語法錯誤。
if count>0: 縮排錯誤的程式
print(' 答案是 ', total/count)
else:
print(' 無法計算 - 個數需為正值 ')
被控制的程式碼必須比主控程式碼內縮。
慣例是內縮四格空白。
大部份開發工具都會自動排版了 – 即你寫完 if … : 之後按下
ENTER 鍵,會自動跳到下一行內縮四個空白處。
44
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
美好的如果
如果條件不成立的時候沒有特別的工作,可以
省略掉 else: 以下的部份。
print(' 薩莉亞餐廳的計費程式 ') 薩莉亞餐廳的計費程式
school = input(' 請輸入就讀學校 > ') # 文字資料 請輸入就讀學校
請輸入人數 > 10
> 臺師大
程式 程式
開始 結束
個數 是
輸入與計價 打折扣 列印總價
為正
45
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
美好的如果
可讀性:撰寫讓人一眼看懂的程式碼
#A #A
本質上有四種 本質上有兩種
真
#B 執行可能性: 假 真
執行可能性:
假
真
AD #C #B ABD
#C ABD ACD
ACD
假
ABCD
#D
#D
46
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
關係運算子
「如果」句型以條件式的運算結果
是真 (True) True 和 False 是布林 (bool,
boolean) 型態唯二的數值。
是假 (False)
注意 True 和 False 的首字母大寫
來控制該執行哪一段程式碼。
。
if True:
print('True')
else:
print('False')
if False:
print('True')
else: True
print('False') False
47
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
關係運算子
關係運算子是二元運算子,其結果經常作為
「如果」句型的條件式。
二元運算子:運算時需要兩個運算元。
意義 關係運算子 結果為真 True 結果為假 False
相等 == 3 == 3 3 == 4
不相等 != 3 != 4 4 != 4
大於 > 4>3 3>4
大於等於 >= 4 >= 4 3 >= 4
小於 < 3<4 4<3
小於等於 <= 3 <= 4 5 <= 4
48
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
關係運算子
運算次序由高至低
次方
乘/除/餘
加/減
關係運算
49
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
關係運算子
挑戰時刻
x = 11
y = 20
print('A')
if 100 > 3:
print('B')
if 100 < 200:
print('C')
if x/2 > 5:
print('D') A
print('E') B
if x+y < 40: C
print('F') D
if x*2 == y: E
print('G') F
if x <= y:
print('H')
H
if x+3*y >= x*3+y: I
print('I') J
if x != y:
print('J')
50
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
關係運算子
Snakify 平台主題
3 Conditions: if, then, else 的習題
Minimum of two numbers:
輸入兩個整數,輸出較小的值。
提示:
將輸入的數值存在變數 a, b
如果 a 小於 b ,輸出 a
……
51
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
挑戰時刻
修改「求平均」程式以達下述功能
如果使用者第一次輸入的個數為正,計算並列印平均。
如果使用者第一次輸入的個數不為正,提示使用者並讓其再
輸入一次個數。
如果使用者第二次輸入的個數為正,計算並列印平均。
如果使用者第二次輸入的個數不為正,提示使用者並結束程式。
完成的同學請向你鄰近的同學說明你的程式邏輯如何運作。
52
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
挑戰時刻
修改「求平均」程式以達下述功能
如果使用者第一次輸入的個數為正,計算並列印平均。
如果使用者第一次輸入的個數不為正,提示使用者並讓其再
輸入一次個數。
如果使用者第二次輸入的個數為正,計算並列印平均。
如果使用者第二次輸入的個數不為正,提示使用者並結束程式。
print(' 計算平均的程式 ') 缺點:
total = int(input(' 請輸入總和 > ')) 1.計算平均的程式片段重覆了。
count = int(input(' 請輸入個數 > ')) 2.控制結構複雜(由一層變成兩層)。
if count>0:
print(' 答案是 ', total/count)
else:
count = int(input(' 個數需為正值,請輸入個數 > '))
if count>0:
print(' 答案是 ', total/count)
else:
print(' 無法計算 - 個數需為正值 ')
53
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
挑戰時刻
修改「求平均」程式以達下述功能
如果使用者第一次輸入的個數不為正,提示使用者並讓其再
輸入一次個數。
如果個數為正,計算平均。
如果個數不為正,提示使用者並結束程式。
if count>0:
print(' 答案是 ', total/count)
else:
print(' 無法計算 - 個數需為正值 ')
同樣的功能,可以有千變萬化的方式來撰寫出程式。除了考慮功能正確性
,未來還要考慮程式碼的簡潔、可讀性、可維護性等等。
54
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
挑戰時刻
這個程式共有幾種可能的執行流程?
print(' 計算平均的程式 ')
total = int(input(' 請輸入總和 > ')) #A
count = int(input(' 請輸入個數 > '))
if count<=0:
count = int(input(' 個數需為正值,請輸入個數 > ')) #B
if count>0:
print(' 答案是 ', total/count) #C
else:
print(' 無法計算 - 個數需為正值 ') #D
編號 執行流程 測試案例
1 AC 依序輸入 100 3
2 ABC 依序輸入 100 0 3
3 ABD 依序輸入 100 0 0
辨識程式可能的執行流程並完整測試是程式員的基本且重要任務。
55
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
如果還有如果
巢狀控制
在前面的挑戰時刻,我們看到了「如果」還有「
如果」的程式碼。
我們通常稱這種多於一層的程式為巢狀 (nested)
控制結構。
print(' 計算平均的程式 ')
total = int(input(' 請輸入總和 > '))
count = int(input(' 請輸入個數 > '))
if count>0:
print(' 答案是 ', total/count)
else:
count = int(input(' 個數需為正值,請輸入個數 > '))
if count>0:
print(' 答案是 ', total/count)
else:
print(' 無法計算 - 個數需為正值 ')
56
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
如果還有如果
巢狀控制
沒有新把戲,只要一層一層走進去就可以了。
假 真
57
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
如果不只兩種可能 …… ?
在前面的例子中,我們判斷個數是不是正值。
如果我們想判斷正值、零和負值,分別作不同
的動作,該怎麼作呢?
這是巢狀的作法
v = int(input(' 請輸入一個整數值 > '))
if v>0:
print(' 正值 ')
else:
if v==0:
print(' 零 ')
else:
print(' 負值 ')
Snakify 平台主題
3 Conditions: if, then, else 的習題
Sign function:輸入一個整數,
若為正數,輸出 1 ;
若為負數,輸出 -1 ;
若為零,輸出 0 。
59
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
如果不只兩種可能 …… ?
if … elif … else 句型
A
#A if condition1:
{
真 } B1
#B1
elif condition2:
假
{
真
#B2 B2
}
假
真 elif condition3: 這段程式有幾種
#B3 可能的執行流程?
{
假 } B3
...
…
else:
#BX {
BX
}
#C C
60
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
如果不只兩種可能 …… ?
最常見的多分法 – 單值
61
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
如果不只兩種可能 …… ?
另一種常見的多分法:區間判斷
price = 100
number = int(input())
if number>=12:
price = price*number*0.9 12 人以上
elif number>=6:
price = price*number*0.95 6-11 人
elif number>=2:
price = price*number*0.99 2-5 人
else:
price = price*number 1 人
要特別注意「由上而下」的判斷順序。
62
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
如果不只兩種可能 …… ?
預備測驗題:請問以下 Python 程式中,若 a
的值為 [0, 1, 2, ..., 9] 中的值,請問有幾個值會
讓程式輸出 B ?
答對率 19/57
if a > 3:
print('A')
elif a > 8:
print('B')
else:
print('C')
0 個
63
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
挑戰時刻
多分法練習:請撰寫一個程式,使用者輸入一
個分數,請依以下區間輸出等第。 臺師大等第制
完成的同學請向你鄰近的同學說明你的程式邏輯如何運作。 分數區間 等第
90~100 A+
score = int(input(' 請輸入分數 > '))
85~89 A
if 90<=score:
print(score, 'A+') 80~84 A-
elif 85<=score: 77~79 B+
print(score, 'A')
elif 80<=score: 73~76 B
print(score, 'A-')
elif 77<=score: 70~72 B-
print(score, 'B+') 這個程式的小缺點:當使用者輸
elif 73<=score: 入其它範圍的分數時(如 500 或
print(score, 'B') 65 ),程式沒有輸出錯誤訊息。
elif 70<=score:
print(score, 'B-') 這個程式你至少要測試過幾次 ?
64
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
挑戰時刻
補強版 A 補強版 B
score = int(input(' 請輸入分數 > ')) score = int(input(' 請輸入分數 > '))
if 100<score: if 90<=score<=100:
print(score, ' 不在本程式接受範圍 ') print(score, 'A+')
elif 90<=score: elif 85<=score<=89:
print(score, 'A+') print(score, 'A')
elif 85<=score: elif 80<=score<=84:
print(score, 'A') print(score, 'A-')
elif 80<=score: elif 77<=score<=79:
print(score, 'A-') print(score, 'B+')
elif 77<=score: elif 73<=score<=76:
print(score, 'B+') print(score, 'B')
elif 73<=score: elif 70<=score<=72:
print(score, 'B') print(score, 'B-')
elif 70<=score: else:
print(score, 'B-') print(score, ' 不在本程式接受範圍 ')
else:
print(score, ' 不在本程式接受範圍 ')
90<=score<=100 在 Python 中是
90<=score and score<=100 的意思。
我們很快就會談到邏輯運算子 and 。
65
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
總結:「如果」句型
一個「如果」句型是由
一個 if
零個以上的 elif
零個或一個 else
組成的。
巢狀:
「如果」句型裡面可以繼續使用「如果」句型。
66
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
邏輯運算子:如果句型的好幫手
邏輯運算子可以簡化「如果」句子。
if month == 8:
if day == 15: 請舉例 month 和 day 的值為何
,會進入到三個不同的分支。
print(' 中秋節快樂 !')
else:
print(' 平常日 ')
else:
print(' 平常日 ')
使用邏輯運算子 and
67
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
邏輯運算子 and
68
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
邏輯運算子 or
若 a 為 True ,無論 b 是 True
a b a or b 或是 False , a or b 的結果都
是 True 。
False False False
在 Python 中,若 a 為 True ,
False True True a or b 運算並不會評估 b 的值
。
True False True 此稱為短路 (short-circuit) 。
Snakify 平台主題
3 Conditions: if, then, else 的習題
Rook Move
題意:如果前兩行的數字所成的座標 (x1, y1) 和後兩
行數字所成的座標 (x2, y2) 在同一列或同一欄,即輸
出 YES ,代表城堡 rook 可以從 (x1, y1) 走到 (x2,
y2) ;否則,輸出 NO 。 69
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
邏輯運算子 not
a not a
False True
True False
如果你只測試 8 15 和 7 15 兩組資料,你就會 * 誤 *
以為你的程式是正確的。 -- 再次例證完整測試的重要
性。
70
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
邏輯運算子
預備測驗題:請問以下 Python 程式的輸出
為何?
答對率 29/57
x = 1
y = 2
if x!=0 or y!=0:
if x>2 and y<3:
print('A')
else:
print('B')
else:
if x<2 and y>1:
print('C')
else:
print('D') B
71
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
「如果」句型與「分類」
請描述 / 想像你在修完本課程後,會使用程式進行什麼樣的資料分析
/ 自動化工作?如果可以,請進一步說明你想處理的資料格式與樣貌。
「可以將資料分群、分類,因為在處理地理資料時分群分類很重要 。」
-- 文學院同學
「我希望能夠分析收集到的語料,通過自動化工作來篩選語料,
快速分類並總結出某種特定用法可使用的語境等等」
-- 文學院同學
72
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
「如果」句型與「分類」
我們已經會使用「如果」來「分類」了耶!
grade = int(input(' 你的年級 >')) score = int(input(' 請輸入分數 > '))
if grade == 1:
print(' 一年級 ')
if 90<=score<=100: 分數區間分類
elif grade == 2:
print(' 二年級 ') print(score, 'A+')
elif grade == 3: elif 85<=score<=89:
print(' 三年級 ') print(score, 'A')
elif grade == 4: elif 80<=score<=84:
print(' 四年級 ') print(score, 'A-')
else:
年級分類
elif 77<=score<=79:
print(' 大大級 ')
print(score, 'B+')
bt = input(' 你的血型 >') elif 73<=score<=76:
if bt == 'O': print(score, 'B')
print('O 型人 ') elif 70<=score<=72:
elif bt == 'A': print(score, 'B-')
print('A 型人 ') else:
elif bt == 'B':
print('B 型人 ')
print(score, ' 不在本程式接受範圍 ')
elif bt == 'AB':
print('AB 型人 ')
else:
print(' 外星人 ') 血型分類
73
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
「如果」句型與「分類」
以下兩群數字怎麼分類?
4 16 4 44 26 64 84 86 89
88
2 6 10 21 65 40 80
81 87
8 68
12 20 82 81 82 0
14 24 83 85
18 8
3 5 17 19 34 52 79 43 52 79
37 37
1 15 57 11 57
21 11 14 -96 -14
9 96
11 91 -74 -30 91
7 13 74 30
74
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
「如果」句型與「分類」
以下兩群數字怎麼分類?
1996 12 2108 34 65 65
4 8 96
800 1887 19 773
if num%4 == 0: 2400 400
if num%100!=0: 799 13
82
# 左上 100 300 21
else: 500 275 443
200
# 左下
2100 2700 19 317 159 191
else:
# 右邊
if num%4 == 0:
# 左邊
else:
# 右邊
75
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
「如果」句型與「分類」
Snakify 平台主題
3 Conditions: if, then, else 的習題
Leap year 四年一閏,逢百不閏,四百又閏
閏年: 4, 8, 12, 400, 800, 2000
非閏年: 2, 3, 5, 7, 100, 200, 300, 500, 2001
如果可能,與一位鄰近同學合力完成此程式:一人口述想法,另一人撰寫程式。
if y%4 == 0: if y%400 == 0:
print('LEAP') print('LEAP')
if y%100 == 0: elif y%100 == 0:
if y%400 == 0: elif y%4 == 0:
else: else: 剩下的部份自行補齊
else:
else: 剩下的部份自行補齊
上面的程式碼使用三層巢狀結構,下面的程式碼僅使用一層。
不過,有些人會覺得下面的程式碼不好懂。
和同學交換你的想法。
76
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Snakify 線上練習平台:作業三
請完成 Snakify 平台主題
3 Conditions: if, then, else 的習題。
計分方式(以題數計):
第 1-12 題,每題做完加總分 0.5 分
提示
Chocolate bar 的題意是給一片有 n m 小塊的巧克力,折一
次,能不能變成含 k 小塊的巧克力。
42 的巧克力,沿虛線折
會變成 6 小塊的巧克力。
77
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Python Tutor http://pythontutor.com/
步進 (step-by-step) 執行程式
視覺化變數內容
線上和它人一起觀看程式並即時傳訊討論
78
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Python Tutor http://pythontutor.com/
如何新增自己的程式?
從首頁進入,點擊 Python Tutor 連結。
79
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Python Tutor http://pythontutor.com/
如何新增自己的程式?
接下來就能鍵入自己的程式囉!
打完程式,再按 Visualize Execution 即可。
80
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Python Tutor http://pythontutor.com/
開始執行
輸入資料(因為你的程式第一
行要執行 input() )
產生一個長期連結,可分享給它人。
81
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Python Tutor http://pythontutor.com/
視覺展示區
步進執行
82
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Python Tutor http://pythontutor.com/
互動、求助與 …… 聊天/交友?
按下此按鈕後,會讓所有在這個網站上的使用者有機會協助你。
83
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Python Tutor http://pythontutor.com/
互動、求助與 …… 聊天 / 交友?
84
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Python Tutor http://pythontutor.com/
互動、求助與 …… 聊天 / 交友?
按下此按鈕後,會產生一個連結,你可傳送此連結給朋友,並和
朋友一起互動討論程式的執行過程以及相關問題。
85
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Python Tutor http://pythontutor.com/
互動、求助與 …… 聊天 / 交友?
Start private chat
按下此按鈕後,會產生一個連結,你可傳送此連結給朋友,並和
朋友一起互動討論程式的執行過程以及相關問題。
86
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
Python Tutor http://pythontutor.com/
傳給朋友,朋友點擊後 ……
朋友的視窗
87
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
更多範例:「如果」句型
多分法:籃球賽最後 10 秒的戰術
if our_score > opp_score: # 贏球
print(' 把球給罰球命中率高的,拖完時間 ')
elif our_score >= opp_score-2: # 差距 2 分以內
print(' 進攻禁區 ')
elif our_score == opp_score-3: # 差 3 分
print(' 設計三分球戰術 ')
else: # 差 4 分以上
print(' 快速進攻,能進就好 ')
88
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
更多範例:「如果」句型
巢狀與多分法:調薪策略
if married:
if num_kids == 0: 已婚 未婚
bonus = 1000
elif num_kids == 1: 收入小於門檻
bonus = 2000
else: #more than one kid $
bonus = 4000
兩人生活
else: #single 一子 多子
89
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
更多範例:「如果」句型
巢狀與多分法:大富翁遊戲 - 升級土地
if money>=price:
print('You can upgrade your land to one of these buildings:\n'
'(1) Department store\n'
'(2) Park\n'
'(3) Business building\n')
choice = int(input('Which type of building do you want?...>'))
if choice == 1:
# 升級為百貨公司
elif choice == 2:
# 升級為公園
elif choice == 3:
# 升級為商辦 pass
else:
大富翁 :
# 不夠錢 http://rich.joypark.com.tw/player/player.aspx
pass
90
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
更多範例:「如果」句型
巢狀與多分法:角色扮演遊戲 - 戰鬥選單
action = int(input(' 選擇行動 ...>'))
if action == 1: # 物理攻擊
weapon = int(input(' 選擇武器 ...>'))
if weapon == 1:
print(' 使用長劍 ')
elif weapon == 2:
print(' 使用拳頭 ')
elif action == 2:
# 法術攻擊
elif action == 3:
# 使用物品
91
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春
更多範例:「如果」句型
巢狀與多分法:角色扮演遊戲 - 接觸 NPC
if not visited:
print('Welcome, adventurer. I will give you some
gift.')
if job == 1: #warrior
attack += 1
elif job == 2: #archer
dexterity += 1
...
92
Python 初體驗。資料科學與程式設計。臺師大通識。 2020 春