明日合作社 Future Collaborators
電腦工程師:
工作坊
11/17(六) 13:30~17:00
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
1 3
1 4
1 5
1 6
Python 3.7.1 Shell
哈囉!
2010~2013 大直高中國中部
2013~2016 師大附中
2016~ 台灣大學資訊工程學系
李哲安
台灣大學資訊工程學系
辦工作坊的目的
• 藉由實際體驗來探索
• 學習如何用工程師的思維解決問題
• 學一點點程式語言,作為踏入資訊領域的敲門磚
今天會做什麼?
什麼是電腦?什麼是程式?
認識蛇蛇
教蛇蛇如何抉擇
教蛇蛇如何做功德
拯救世界
我 是 蛇 蛇 !
什麼是電腦?什麼是程式?
資料
• 包括數字、文字、聲音、影像等等。
• 所有資料都只用 0 與 1 就可以表示出來。
資料
數字 1365
10101010101
文字
畫 蛇 添 足
30059 34503 28155 36275
p y t h o n
112 121 116 104 111 110
聲音
影像
#9A6036
紅色 154/255
綠色 96/255
藍色 54/255
什麼是電腦?
• 電腦能是一種輸入資料、處理資料、輸出資料的裝置。
輸入單元
Input Unit
輸出單元
Output Unit
中央處理單元
Central Processing Unit
記憶體
Memory
鍵 盤 麥 克 風
滑 鼠 攝 影 機
螢 幕 印 表 機
音 響 投 影 機
算 術 的 地 方 儲 存 的 地 方
什麼是程式?
• 程式指揮電腦如何處理資料。
0000 0000 0000 0001 0000
0000 0001 0000 0000 0001
0001 0001 0000 0001 0000
0001 0000 0000 0000 0001
從016號倉庫拿資料到抽屜A
從001號倉庫拿資料到抽屜B
把抽屜B的資料存回016號倉庫
把抽屜A的資料存回001號倉庫
翻 譯 蒟 蒻
什麼是程式語言?
• 程式語言幫助我們寫出能夠指揮電腦的程式。
array = list(map(lambda x: int(x), input().split()))
array.sort()
print(' '.join([str(x) for x in array]))
翻譯
程式
0 1 0 1 0 1 1 1 0 1 1 0 1 0 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 1 0 1 0 1 0 0 0 1 0 0 0 1 1 1 1 0 1 0
0 1 0 0 0 1 1 1 0 1 1 0 0 1 0 0 0 1 1 0 1 0 1 1 1 1 0 1 0 0 1 0 1 0 1
0 0 1 1 0 0 1 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 …
陪蛇蛇玩的日常
撰寫程式
W r i t e
測試程式
T e s t
周而復始
F o r e v e r.
W r i t e
T e s t
F o r e v e r .
為什麼要跟蛇蛇一起玩?
• 很多人都在用,很多人都在學。
• 因為規則簡單,練習時比較不容易因為語法的問題犯錯。
• 因為寫起來方便,可以增進寫程式的效率。
• 應用廣泛,支援網路、系統管理、數據分析、科學運算等等。
我 是 蛇 蛇 !
認識蛇蛇
Python
• 是近年快速成長的一種程式語言。
• 以優雅、明確、簡單作為其設計哲學。
• 我們今天會使用Python 3這個版本,和舊版本會稍微不同。
線上撰寫程式平台:repl.it
• 可以在線上寫程式並看到執行的結果。
• 首頁往下拉可以選擇語言 (languages)。
• 我們使用的程式語言是 Python。
• 注意不要選到 Python 2.7,那是舊的版本。
命令蛇蛇
• 分成左邊的程式區和右邊的互動區兩個部分。
• 在互動區我們可以對蛇蛇下指令,把蛇蛇當成一個計算機。
>>> 3 + 2
5
>>> 8 * 7
56
>>> (21 - 7) / 2
7.0
寫下教戰守則
• 剛剛是直接透過命令列介面跟蛇蛇溝通,但是一般而言我們
會把要做的指令撰寫好,再把所有指令一起告訴蛇蛇。
• 透過這樣的方式,蛇蛇平時是不會說話的。
• 要利用 print(內容) 這個指令才會讓蛇蛇說話。
print(3 * 6)
print(2 - 18)
p.11
資料的家:變數 (variable)
• 蛇蛇的腦袋記不住太多東西,所以我們會幫資料找房子住。
• 而變數就是儲存資料的地方,會取一個變數名稱來稱呼它。
• 需要利用等號來儲存資料,亦即 變數 = 值 。
p.2
資料的家:變數 (variable)
• 資料分為不同的種類,我們這些不同的種類稱為資料的型別。
• 利用 type(資料) 可以看到資料的型別。
p.11
資料的種類:型別 (type)
型別 簡稱 例子
整數 (integer) int 0, 1, -3
浮點數 (floating-point number) float 0.2, 1.0, -12.34
字串 (string) str "hello", 'python'
p.4
轉型
str
字串
int
整數
float
浮點數
int()
str() str()
int()
float ()
float ()
p.4
數字的運算 (I)
運算 運算子 例子
加法 + cost = price + tax
減法 - profit = revenue - cost
乘法 * force = mass * acceleration
除法 / speed = distance / time
p.3
數字的運算 (II)
運算 運算子 例子
取商 // days = seconds // 86400
取餘數 % ones_digit = number % 10
取次方 ** area_of_square = side ** 2
p.3
字串的運算
運算 運算子 例子
連接 + fruit = 'water' + 'melon'
重複 * snore = 'z' * 100
p.3
讓蛇蛇問我們問題
• 有時候要等到蛇蛇開始工作,我們才知道要讓蛇蛇做什麼。
• 這時候就可以用 input(問題) 讓蛇蛇問我們問題。
• 遇到數值時可以用轉型幫我們從字串轉換成正確的型別。
name = input('Your name is:')
age = int(input('How old are you?'))
p.11
實作一 (故事)
• 蛇蛇想要買東西,但是蛇蛇數學不好,所以每次買東西都要
用大鈔來付錢。
• 但是蛇蛇覺得這樣不太好,因為蛇蛇的錢包裡總是塞滿了零
錢。
• 所以蛇蛇希望大家可以幫他算算看,買東西的時候要拿多少
零錢出來,就能用掉這些零錢了。
p.9
實作一 (題目)
• 蛇蛇想要買一個1~100元的東西,希望你可以幫他算出分別
要用幾個50元硬幣、10元硬幣、5元硬幣、1元硬幣。
• 雖然蛇蛇很多零錢,但不想讓店家麻煩,所以希望每次都能
使用最少的硬幣個數。
p.9
實作一 (範例)
78
用 input () 輸入
1
2
1
3
用 print () 輸出
50元的硬幣個數
10元的硬幣個數
5元的硬幣個數
1元的硬幣個數
要付的金額
p.9
教蛇蛇如何抉擇
抉擇
• 我們可以用流程圖來表示該如何抉擇。
餐廳有沒有開? 進去吃飯!
去便利商店買QQ
有
沒 有
條件 (condition)
• 條件是一種可以明確地回答「對」或「不對」的問題。
• 在程式語言中,通常我們用「真」與「假」表示。
真值 表示法 例子
真 True 4 * 4 == 16
假 False 16 * 16 == 196
比較 (comparison)
運算 運算子 例子
等於 == my_money == your_money
小於 < my_money < your_money
大於 > my_money > your_money
不等於 != my_money != your_money
小於或等於 <= my_money <= your_money
大於或等於 >= my_money >= your_money
p.3
如果電話亭 (I)
• 我們用 if 條件: 來表示條件分支的開始。
• 每個冒號的下一行要進行縮排:
• 每個冒號的下一行要進行縮排:
• 每個冒號的下一行要進行縮排。
if age < 18:
print('You cannot buy alcohol.')Tab
p.5
如果電話亭 (II)
• 我們用 else: 來表示願望沒有成真時要做什麼。
• 願望是指在上面(處在同一層縮排)的 if 後面的條件。
if age < 18:
print('You cannot buy alcohol.')
else:
print('Here you are.')
p.5
如果電話亭 (III)
• 你可以許新願望。
if age < 6:
print('You should not watch this movie.')
else:
if age < 12:
print('Where are your parents?')
p.5
如果電話亭 (IV)
if nationality == 'Taiwan':
if age >= 20:
if under_guardianship == False:
print('You can vote!')
• 你可以不斷許願。
p.5
成為有邏輯的蛇蛇
運算 運算子 例子
而且 and age >= 18 and age < 65
或者 or age < 18 or age >= 65
不是 not not age >= 20
• 「或者」是指至少有一個成立,兩個都成立也算。
p.3
如果電話亭 (V)
if nationality == 'Taiwan' and age >= 20 and under_guardianship == False:
print('You can vote!')
else:
print('You cannot vote.')
• 用點邏輯就能讓滿滿的願望變成簡單的生活。
• 當邏輯較為複雜時,我們可以用小括號指定順序。
p.5
如果電話亭 (VI)
• 我們用 elif 新條件: 來表示舊願望沒有成真時所許的新願望。
if age < 6:
print('You should not watch this movie.')
elif age < 12:
print('Where are your parents?')
p.5
如果電話亭 (VII)
if age < 6:
print('You should not watch this movie.')
elif age < 12:
print('Where are your parents?')
else:
print('Here is your ticket.')
• 總結。
p.5
表與裡
if age < 6:
print('You should not watch this movie.')
elif age < 12:
print('Where are your parents?')
else:
print('Here is your ticket.')
print('Bye-bye.')
p.5
實作二 (故事)
• 小蝸是蛇蛇的朋友。
• 小蝸的生日是2月29日,所以小蝸四年才能過一次生日。
• 蛇蛇每年都很期待能幫小蝸慶生,但是不是每年都有2月29
日,所以蛇蛇想知道哪一年可以幫小蝸慶生。
p.9
實作二 (題目)
• 給定一個西元的年份,蛇蛇希望你能告訴他那一年有沒有辦
法幫小蝸慶生。
• 有2月29日的年份被稱為閏年。
p.9
實作二 (範例1)
2018
用 input () 輸入
False
用 print () 輸出
能不能幫小蝸慶生
西元年份
p.9
實作二 (範例2)
2020
用 input () 輸入
True
用 print () 輸出
能不能幫小蝸慶生
西元年份
p.9
教蛇蛇如何做功德
做功德
我還要工作嗎? 努力工作……
下班囉!
對
不 用 了
教蛇蛇做功德 (I)
• 我們用 while 條件: 來表示做功德的開始。
• 蛇蛇會一直做功德,直到條件不成立為止。
times = 3
while times > 0:
print('I am working!')
times = times - 1
p.6
教蛇蛇做功德 (II)
• 要注意 while 條件: 中的條件必須要在做功德的途中被改變,
否則就會不斷做功德。
times = 0
while times < 10:
print('I am working!')
times = times + 1
times = 0
while times < 10:
print('I am working!')
做十次功德 做一生功德
p.6
明訂職權範圍
• 為了避免蛇蛇做太多功德,我們常常會幫蛇蛇訂定職權範圍。
• 用 for 成員 in 容器: 限定做功德的範圍。
• 用中括號包起來的資料稱為序列。
friends = ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve']
for friend_name in friends:
print('Hi, ' + friend_name)
p.6
明訂工作次數
• 用 range(次數) 訂定做功德的次數。
for number in range(10):
print(number)
if number % 2 == 0:
print('It is an even number!')
else:
print('It is an odd number!')
p.7
能做功德的就是好蛇蛇
for times in range(10):
print('I am working!')
times = 0
while times < 10:
print('I am working!')
times = times + 1
p.6
實作三 (故事)
• 蛇蛇跟小蝸在玩一個數數字的遊戲。
• 從 1 開始數,數到數字要唸出來。
• 但是如果數到的數字有 3 在裡面,或是本身就是 3 的倍數,
就不能唸出來,要改成拍手。
• 例如 9、12、23、37 都要拍手,而 8、16、29 不用。
p.10
實作三 (題目)
• 一開始蛇蛇會告訴你一個數字,表示最多要數到多少。
• 把要數的數字印出來;如果要拍手,印出「x」。
p.10
實作三 (範例) 1
2
x
4
5
x
7
8
x
10
11
x
x
14
x
用 print () 輸出
用 input () 輸入
15 要數到多少
p.10
拯救世界
拯救世界前的準備
• 請確保你具有能登入的 Google 帳號以參加挑戰。
搶救王冠大作戰
• 限制時間 60 分鐘。
• 請在宣布開始時由工作坊網站 csworkshop.at.tw 點選連結
以進入挑戰。
• 以獲得最多的惡作劇點數為目標,最高可獲得100點。
• 必須使用 Google 帳號填寫表單答題,答完可以編輯。
• 可利用計分板觀察每個試煉的作答狀況。
• 完整規則請見挑戰的「規則」部分。
回顧
• 試煉一
• 試煉二
• 試煉三
• 試煉四
感謝大家今天的參與!

投影片