I Love Python. I Learn Python. I Teach Python. I Am a Python.

2014/07/05

教小孩 學 Python 程式語言,用 中文 及 英文。(00)

教小孩 學 Python 程式語言,用 中文 及 英文。

前言:

2014年 4月,
應邀去小兒子的學校分享了 4 小時的程式設計經驗,
https://speakerdeck.com/renyuanl/teaching-teenagers-to-coding



後來學校老師提及是否有發展成正式課程的可能,
我想了一下,在網路上東拼西湊,加上自己的見解,

就規劃出以下大約 24 節 的課程進度。

如果你對這個 課題 或 課程 有興趣, 歡迎 留言 連繫。








大家都來 學 寫程式,可能嗎?

Coding for all – is it possible? 


這不是現在進行式,但越來愈多人認為確有其必要!
越來越多的 中小學生 開始有了以 Scratch 為基礎的 程式設計課程 的經驗,
也體會了何謂寫程式。

那麼,下一步呢?

 Python 

無疑是公認的最佳選擇!

但很重要的一點是,

如何【不】「揠苗助長」!


我喜歡寫程式,但也很清楚,寫了一支充滿小蟲的程式,
以及隨之而來的除蟲過程,實在也滿挫折的,
在沒有充分心理準備之前,這種經驗確實會讓很多人卻步!

可能要優先避免的是數學風格的程式教學,
如果學生本身就不是很喜歡數學的話!

還要認知到,每個學生的學習速度有快有慢及軌跡各不相同。

動畫以及科學模型應該有幫助,但切記那也絕非萬能。

這些年來我發現要培養成一位程式師唯一之道就是「持續不斷」的寫程式。

一個可行的策略是像學習傳統語言閱讀那樣的「分級學習」。 

一個級數學過了之後,學習成果穩固了,才進到下一級。

目前,我們採取的教材嘗試把進度分為三級:
  • Level 1
    • 基本變數、決策、迴圈、鍵盤輸入、簡單視窗輸出介面
  • Level 1.5
    • 龜 作圖
  • Level 2 
    • 複雜的資料型態(含列表、字典)、滑鼠(含觸控)輸入、複雜的視窗介面
  • Level 3 
    • 物件(類)導向 (OOP) 方法、專案(遊戲)程式設計 







Python Basics

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
'''
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 鍵來搖動我。
搖啊搖、、、搖啊搖、、、搖啊搖、、、搖啊搖、、、
是對未知的恐懼綁住了你。
請按 任何鍵 來結束程式。
再見!
'''
view raw ryMy8ball.py hosted with ❤ by GitHub


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

'''
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
你猜中了,太棒了!
請按任意鍵離開。。。
'''
view raw ryNumber.py hosted with ❤ by GitHub


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

'''
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()



2 則留言:

  1. 如果你對這個 課題課程 有興趣, 歡迎 留言 連繫。

    回覆刪除
  2. 您的用中文寫程式的理念很棒,不僅華人小孩受益,
    某些「失學(程式語言)」的華人成年人應也可從中獲益。

    回覆刪除