教小孩 學 Python 程式語言,用 中文 及 英文。
前言:
2014年 4月,
應邀去小兒子的學校分享了 4 小時的程式設計經驗,
https://speakerdeck.com/renyuanl/teaching-teenagers-to-coding
後來學校老師提及是否有發展成正式課程的可能,
我想了一下,在網路上東拼西湊,加上自己的見解,
就規劃出以下大約 24 節 的課程進度。
如果你對這個 課題 或 課程 有興趣, 歡迎 留言 連繫。
如果你對這個 課題 或 課程 有興趣, 歡迎 留言 連繫。
大家都來 學 寫程式,可能嗎?
Coding for all – is it possible?
這不是現在進行式,但越來愈多人認為確有其必要!
越來越多的 中小學生 開始有了以 Scratch 為基礎的 程式設計課程 的經驗,
也體會了何謂寫程式。
那麼,下一步呢?
Python
無疑是公認的最佳選擇!
但很重要的一點是,
如何【不】「揠苗助長」!
以及隨之而來的除蟲過程,實在也滿挫折的,
在沒有充分心理準備之前,這種經驗確實會讓很多人卻步!
可能要優先避免的是數學風格的程式教學,
如果學生本身就不是很喜歡數學的話!
如果學生本身就不是很喜歡數學的話!
還要認知到,每個學生的學習速度有快有慢及軌跡各不相同。
動畫以及科學模型應該有幫助,但切記那也絕非萬能。
這些年來我發現要培養成一位程式師唯一之道就是「持續不斷」的寫程式。
一個可行的策略是像學習傳統語言閱讀那樣的「分級學習」。
一個級數學過了之後,學習成果穩固了,才進到下一級。
目前,我們採取的教材嘗試把進度分為三級:
- Level 2
- 複雜的資料型態(含列表、字典)、滑鼠(含觸控)輸入、複雜的視窗介面
- Level 3
- 物件(類)導向 (OOP) 方法、專案(遊戲)程式設計
Ch.1 - Python, IDLE & Your First Program:
- >>> Meet the programming language you are going to learn about.
- 看看你將要學的程式語言:Python
- >>> Meet IDLE which will help organise and run your code easily.
- 最簡潔的 Python 編輯、解譯器:IDLE
- >>> Check that your computer is set up correctly.
- 檢查、測試電腦的Python學習環境的設定
- >>> Write and run your first program.
- 第一支程式
print('Hello, world!') 印= print 印('你好,世界!')
Ch.2 - Some text, some maths & going loopy:
- >>> Learn how to do some more with texts.
- 對「文字」做一些「處理」
print('I know it.\nYou didn\'t know.') 印= print 印('甲乙丙丁\tあいうえお\nabcd\tαβρδ\n')
- >>> Get Python to do some maths for you.
- 做一些「數學」
- >>> Learn about how loops work.
- 學一點「迴圈」的概念
- >>> Learn lots of useful operators.
- 多學一些數學及文字的「運算子」
Ch.3 - Readable code and My8Ball Game:
- >>> Write and save a Python file using Script Mode.
- 用劇本模式寫 Python 程式,並存起來。
- >>> Learn how to write clear readable code.
- 學習寫「明白易懂」的程式碼
- >>> Run a Python file.
- 「跑」一支 Python 程式
- >>> Learn about how to get user input.
- 學習如何取得 程式使用者 的 輸入
- >>> Learn about if and else clauses.
- 學習條件子句: if, else
- >>> Write a short game called my8Ball.
- 仿寫一支小遊戲程式,「我的8顆球」
Here is a movie of this chapter's project: my8ball.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
ryMy8ball.py | |
我的8顆球.py | |
呂仁園,2014/07/07 | |
''' | |
import random | |
# | |
# 所用到的 Python 函數之中文別名。 | |
# | |
印= print | |
輸入= input | |
取隨機整數= random.randint | |
# | |
# 「我的8顆球」程式 正式開始。 | |
# | |
答1= '加油!' | |
答2= '我沒意見啦!' | |
答3= '我沒聽清楚。再問我一次。' | |
答4= '是對未知的恐懼綁住了你。' | |
答5= '你這樣做是很瘋狂的!' | |
答6= '只有你能拯救人類!' | |
答7= '你做或不做對我來說沒什麼差別。' | |
答8= '是的,我認為採取平衡之道是正確的選擇。' | |
印('歡迎來到 「我的8顆球」 遊戲!') | |
輸入('要向我詢問建議,請按 Enter 鍵來搖動我。') | |
印('搖啊搖、、、' * 4) | |
選擇= 取隨機整數(1, 8) | |
if 選擇 == 1: 答案= 答1 | |
elif 選擇 == 2: 答案= 答2 | |
elif 選擇 == 3: 答案= 答3 | |
elif 選擇 == 4: 答案= 答4 | |
elif 選擇 == 5: 答案= 答5 | |
elif 選擇 == 6: 答案= 答6 | |
elif 選擇 == 7: 答案= 答7 | |
else: 答案= 答8 | |
印(答案) | |
輸入('請按 任何鍵 來結束程式。') | |
印('再見!') | |
# | |
# (某次)執行結果 | |
# | |
''' | |
歡迎來到 「我的8顆球」 遊戲! | |
要向我詢問建議,請按 Enter 鍵來搖動我。 | |
搖啊搖、、、搖啊搖、、、搖啊搖、、、搖啊搖、、、 | |
是對未知的恐懼綁住了你。 | |
請按 任何鍵 來結束程式。 | |
再見! | |
''' |
Ch.4 - Functions:
- >>> Learn about functions .
- 函數(式),一組特定功能的程式碼。
- >>> Write your own functions.
- 寫自己定義的函數。
- >>> Create a number guessing game.
- 創作一個「猜數字」遊戲。
Here is a movie of this chapter's project: myNumber.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
ryNumber.py | |
猜數字遊戲 | |
呂仁園, 2014/07/07 | |
''' | |
import random | |
# | |
# 引用 4 個函數 | |
# | |
隨機整數= random.randint | |
印= print | |
輸入= input | |
轉成整數= int | |
# | |
# 自己創造 1 個函數 | |
# | |
def 測試是否相同(目標, 猜測): | |
if 目標 == 猜測: | |
電腦提示= '你贏了' | |
elif 目標 > 猜測: | |
電腦提示= '太低' | |
else: | |
電腦提示= '太高' | |
return 電腦提示 | |
# | |
# 主程式由此開始 | |
# | |
電腦數字= 隨機整數(1, 100) | |
印('你好,電腦想了一個數字,介於 1 和 100 之間。') | |
猜的數字= 轉成整數(輸入('請你猜一猜(1~100):')) | |
電腦提示= 測試是否相同(電腦數字, 猜的數字) | |
while 電腦提示 != "你贏了": | |
猜的數字= 轉成整數(輸入('你猜 %d %s,再試一次:'%(猜的數字, 電腦提示))) | |
電腦提示= 測試是否相同(電腦數字, 猜的數字) | |
印('你猜中了,太棒了!') | |
輸入('請按任意鍵離開。。。') | |
# | |
# 某次執行結果 | |
# | |
''' | |
你好,電腦想了一個數字,介於 1 和 100 之間。 | |
請你猜一猜(1~100):50 | |
你猜 50 太高,再試一次:25 | |
你猜 25 太低,再試一次:37 | |
你猜 37 太低,再試一次:43 | |
你猜 43 太高,再試一次:40 | |
你猜 40 太高,再試一次:38 | |
你猜中了,太棒了! | |
請按任意鍵離開。。。 | |
''' |
Ch.5 - MyEtchASketch:
- >>> Learn how to use the tkinter library.
- 學習使用 tkinter 函數庫
- >>> Make your own Etch A Sketch game.
- 自己做一個 Etch A Sketch 遊戲
- >>> Learn how to put an application in its own window.
- 學習把應用程式放在它自己的視窗中
- >>> Learn how to attach functions to keyboard presses.
- 學習把函數和鍵盤的按鍵連結起來
Here is a movie of this chapter's project: myEtchaSketch.py
Here is a movie of a two player version: ourEtchaSketch.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
ryEtchaSketch.py | |
蝕刻繪圖板 Etch a Sketch, | |
一種有名的兒童玩具。 | |
呂仁園, 2014/07/08 | |
''' | |
from tkinter import Tk, Canvas, ALL | |
# | |
# 引進 tkinter 模組中的幾個物類,以及常數。 | |
# | |
窗類= Tk | |
布類= Canvas | |
全部= ALL | |
# | |
# 設定本程式幾個重要 參數。 | |
# | |
布寬= 600 | |
布高= 400 | |
布色= 'black' | |
點x= 布寬/2 | |
點y= 布高 | |
點色= 'green' | |
點寬= 點高= 10 | |
# | |
# 自定「點」控制函數,使用鍵盤的方向鍵。 | |
# | |
def 點移上(e): | |
global 點y | |
布.create_line( 點x, 點y, 點x, 點y-點高, | |
width= 點寬, | |
fill= 點色) | |
點y -= 點高 | |
def 點移下(e): | |
global 點y | |
布.create_line( 點x, 點y, 點x, 點y+點高, | |
width= 點寬, | |
fill= 點色) | |
點y += 點高 | |
def 點移右(e): | |
global 點x | |
布.create_line( 點x, 點y, 點x+點高, 點y, | |
width= 點寬, | |
fill= 點色) | |
點x += 點寬 | |
def 點移左(e): | |
global 點x | |
布.create_line( 點x, 點y, 點x-點高, 點y, | |
width= 點寬, | |
fill= 點色) | |
點x -= 點寬 | |
def 清除全部(e): | |
布.delete(全部) | |
# | |
# 主程式由此開始 | |
# | |
窗= 窗類() | |
窗.title("蝕刻繪圖板") | |
布= 布類( bg= 布色, | |
height= 布高, | |
width= 布寬, | |
highlightthickness= 0) | |
布.pack() # 包裝 | |
# | |
# 鍵盤按鍵 與 控制函數 連結 綁定(bind) | |
# | |
窗.bind("<Up>", 點移上) | |
窗.bind("<Down>", 點移下) | |
窗.bind("<Left>", 點移左) | |
窗.bind("<Right>", 點移右) | |
窗.bind("u", 清除全部) | |
# | |
# 視窗程式的主迴圈,無窮迴圈, | |
# 主要用來接收使用者的事件訊息, | |
# 並做出反應。 | |
# | |
窗.mainloop() |
如果你對這個 課題 或 課程 有興趣, 歡迎 留言 連繫。
回覆刪除您的用中文寫程式的理念很棒,不僅華人小孩受益,
回覆刪除某些「失學(程式語言)」的華人成年人應也可從中獲益。