教小朋友寫Python

在網路上隨手買了一本電腦書給弟弟,滿便宜的399,超商取貨省下很多往返書局的時間。設定環境和PyCharm我先先幫他設好,等他未來有空再自己去摸索。今天學了運算子,變數,資料型別,if…else, 迴圈。

注意事項:請不要讓小孩連續1小時進行「近距離觀看手機/螢幕/作業/書」,這會增加小孩近視的風險,要和學校上課/下課一樣,中間增加其他活動讓眼睛可以休息。

教學的實況:https://youtu.be/vTQ4MChepHY

 

隨手買的書:Python 程式設計「超入門」
http://www.books.com.tw/products/0010734452

對照看的網路教材:30天Python學習分享路程
https://ithelp.ithome.com.tw/users/20107812/ironman/1539

索引
01 Python撰寫前的準備
02 如何建立Python專案與介紹PyCharm介面
03 識別字與變數
04 Python資料型態
05 Python資料型態(下)
06 運算單元
07 流程控制-for迴圈與while迴圈
08 Python-決策判斷篇if else敘述
09 Python-函式使用介紹
10 介紹如何使用PyCharm安裝函式庫
11 寫爬蟲程式前你必須知道的些事情
12 什麼是HTTP協定_
13 Python-使用Request向Server端請求資源
14 使用BeautifulSoup解析原始碼
15 BeautifulSoup(下)
16 Python-檔案處理篇(上)
17 Python -檔案處理篇(下)
18 Python Selenium模組介紹 (一)
19 Python Selenium模組介紹 (二)
20 Python 例外處理
21 Python 物件導向(一)
22 Python 物件導向(二)
23 Python 物件導向(三)
24 Python物件導向(四)
25 Python 正則表達式篇
26 Python 做一個簡單的小爬蟲(一)
27 Python 做一個簡單的小爬蟲(二)
28 Python 做一個簡單的小爬蟲(三)
29 Python 分享三年前大學爬蟲專題心得
30 Python 自學30天心得分享

一小時PYTHON入門-PART 1
https://hellolynn.hpd.io/2017/01/18/%E4%B8%80%E5%B0%8F%E6%99%82python%E5%85%A5%E9%96%80-part-1/

一小時PYTHON入門-PART 2
https://hellolynn.hpd.io/2017/01/18/%E4%B8%80%E5%B0%8F%E6%99%82python%E5%85%A5%E9%96%80-part-2/

Python – 十分鐘入門
http://tech-marsw.logdown.com/blog/2014/09/03/getting-started-with-python-in-ten-minute

Python基础
https://morvanzhou.github.io/tutorials/python-basic/basic/

大陸人(周莫烦)錄製的中文教學影片,感覺好專業!而且相關的進階教學都很完整!

附註: python3 和 python2 差不多,直接學 python3 比較好,可以省下「unicode」文字編碼在 encode/decode 轉換上的問題。

如何使用Python來寫遊戲——超級瑪麗第一關
https://kknews.cc/zh-tw/game/px4j6z2.html

零基础学Python之—AI五子棋(1)
https://zhuanlan.zhihu.com/p/28364376

Python开发小游戏(上)
https://www.youtube.com/watch?v=NdMqMTDh05Y

 

Python Web 程式設計入門實戰
https://hahow.in/courses/58001218da04300700fdee95/main?curriculum=5a1e1742a2c4b000589dcfe1

這個課程裡,有2個免費試看的項目:

  • Python 程式設計初體驗(寶可夢 Pokemon 對戰遊戲範例)
  • PTT 表特版與八卦版網路圖片網路爬蟲基礎(Requests/BeautifulSoup)

我覺得他寫Pokemon 這段寫的滿好的,在學習完 python 的 object 還有 def 後就可以用這個來練習物件、函數還有繼承的概念。

 

 


分享第二天的心得:

雖然第一天很快地講解了一次「運算子,變數,資料型別,if…else, 迴圈(for)」,但幾乎都是我在講,所以他用聽的,幾乎95%以上內容隔天都忘了。

第二天,重新再講一次,也讓他多去打書上的範例程式,自己打過一次,他比較記的起來,只是比較,他自己打過的範例,他也是都忘光光。@[email protected]


分享第三天的心得:

接著第二天遇到的,在學到函式(fuction) 之後,出了很多題目給他做,但他一題都沒做出來,也都是我自己公佈答案,感覺像是前二天都是白講的,像是進度只有零。

首先是,印出數字 1到 20,前二天都有練習到,但到了第三天,完全沒有印象,也完全無法實用,所以再翻回去一開始的 for count in range() 再來。

接著是判斷某一個數字是不是質數,質數的定義滿簡單的,就是中間遇到的數字,不能有餘數是零的數字。用python 就是把目的的數字去 mod (符號用:%) 去跑迴圈,有遇到結果等於零就是被整除,就不是質數。最後程式只有超短的5~6行,也是都我自己完成,他一行也擠不出來。

接著我們一起完成了一個函數,把一個變數放進去,可以傳回  True or False 用來判斷是不是質數。我們試了很多數字進去,確定函數沒問題,也有使用debug mode 去一行一行 trace code, 並講解變的變化。

接著我們又練習一個「輸入2個數字,傳回較大的」的函數,程式也是 3~4行,簡單的if 判斷,他說想不出來怎麼寫,我們先回去練習一次 if 的判斷,再回來寫這一個函數。我先試給他看,沒有 if 的話,用 return 可以傳回第一個參數值a,還有傳回第二個參數值b,接著練習傳回 a > b , 是可以傳回 boolean。請他接著完成整個 function 只差一個 if … eles … 他想很久,還是想不出來要怎麼寫,我後來就跟他講答案,方法很多,打給他看某一個解法。

對函數有基本認識後,也完成了一個「判斷某數是否為質數」的函數,我請弟弟列出 1~100 裡的數字有那些是質數,也一樣,想半他就呆坐很久,也想不出來,我就請他印出 1~ 100, 曾學過弟弟也打過的範例,還是說不知道、不清楚、不會。好吧我再跟他講答案。接著我問,在這個1~100的架構下,遇到 for 的變數內容是 >= 10 and <= 20 的才印出來,他也不會。我又再跟他講答案。接著都有這個 for + if + print 的架構,只要把 if 裡的判斷換成去呼叫我們一起完成的判斷質數函數就行,我請他來完成,他也說不會寫。我就再示範、講解還有進入 debug mode step by step trace code 給他看。

最後,我試了一個 2維的迴圈給他看,會印出一個 5 x 5 的 * 正方形,我問他怎麼印出 * 做的三角形。我想二維小朋友應該比較無法想像,所以印出星星的部份,我換成一維的迴圈,因為python 可以用 “*” * 5 來完成印星星,我試範一維迴圈完成印出5 x 5 的 * 正方形,我在紙上畫了一個三角形的形狀請他接下去做,他也不會。

我跟他說 for count in range(5) 是印出 0 1 2 3 4,我想印出 5 4 3 2 1 要怎麼做,他也不會。

我先示範,在迴圈外放一個變數 ,每次進 for loop 時減一給他看,可以完成 印 5 4 3 2 1. 我問他不使用這一個變數 只用 for count in range(5) 怎麼印出 5 4 3 2 1 他還是想不出來,我說很簡單哦,就用 5 去減 counter 就是答案了。

第三天的最後的感想是:

除了書上的範例是已知的答案,超過書上的問題,都是我一個人在唱獨角戲來實作。而且,講過的東西忘記是很正常。

最後弟弟問我一個問題:

爸爸你為什麼要教我寫程式。

我實在是不知道該回答什麼好。對呀,教他寫程式要做什麼?似乎有點太早。跟他講寫程式可以賺錢,小孩也不用這麼早出來賺錢。跟他解寫程式可以幫他解決生活上遇到的問題,他生活上的問題似乎都很簡單,不用寫程式也可以解決,科科。


第4天的心得:

弟弟隨手翻到 Dictionary,於是我們練習一下書上的範例,弟弟照書上的範例打完後,修改一下範例,改出了很多錯誤,我覺得這很棒,我也是透過 try error 來學習,進而成長,透過 try error 可以知道程式語言的限制和框架的範圍,大多的書和網路上Youtube 的教學都是只教「正確」的部份,透過寫有錯誤的,去了解為什麼錯,應該更能記的起來這個程式語言如何去操作。

我們練習的 sample:

menu={"a":1, "b":10, "c":100}

for o in menu:

    print(o)

    print(menu[o])

弟弟把 “b”:10 換成 “b”:def 我說  def 是保留字,不能用,他換成 “b”:xyz 錯誤訊息是 xyz not defined 我說要把 xzy 變成 “xyz” 或 要先指定 xyz 的值給他,像是  xyz=”abc” 之類。

結論:弟弟對子串變數還不是很了解。

所以我們重頭回來講 1+1 = 2 這是數值的變數,但 “1” + “1” = “11” 這是字串內容。

接著練習 while(True): 的迴圈,他寫了一個小程式

while(True):

    print("打人")

我問弟弟怎麼改寫成,只打 10次就離開。弟弟照著書上while 的範例,改寫完成了,滿厲害的,好像比較了解變數的使用方法。

接著我把 print(“打人”) 改成 print(“打a人”) 我問他,怎麼改寫成第 1次寫 “打1人”,第2次是輸出 “打2人”… 以此類推。他說他不會。

我就加了一個變數 a 來疊加,並使用 debug mode 去 step by step trace code 給弟弟看,看 a 值每次都會被加一,我問他怎麼把值印出來,他說不會。

我說,print(“打a人”) 可以換成 print(“打” + “a” + “人”) 因為字串可以相加,像火車的車箱一樣可以串起來。把 print(“打” + “a” + “人”) 換成 print(“打” + a + “人”) 會出錯,顯示 must be str not int, 是說必需要用字串來加字串,因為 a 是數值變數,所以要在 a 的外面加一個 str(a) 把他轉換成字串型別,就可以相加。最後就是我們要的結果了。

寫程式對我來說,像是翻譯和拼圖。把人類預期的結果透過程式語言的符號去表達給電腦看,電腦就可以照我們的意思去快速地運算出我們想要的結果。拼圖的概念的針對需要的項目去學習就可以了,因為可以學的東西範圍太多,練習的範例多一點,可以拼出的圖片就會比較大一點。

相關文章

寫留言

你的電子郵件位址並不會被公開。 必要欄位標記為 *