林賽雅 謝作如
毫無疑問,Python已經(jīng)成為當(dāng)前中小學(xué)最熱門的編程語言。據(jù)了解,普通高中信息技術(shù)的五套新教材,全部選擇了Python。當(dāng)孩子們具備了以Scratch、Blockly或者扣叮為代表的圖形化編程基礎(chǔ)后,在代碼編程方面,Python成為最好的選擇之一。
Logo語言是MIT著名計(jì)算機(jī)教授西蒙·派珀特專為兒童設(shè)計(jì)的編程語言,曾經(jīng)風(fēng)靡全球,直到最近十年才慢慢被Scratch所替代。有人開發(fā)了一個(gè)叫Turtle的Python庫(kù),繼承了Logo語言的所有功能。筆者希望能夠借助畫畫的方式,讓初學(xué)者熟悉Python語法,但是Python命令行形式的編程界面總不夠友好。直到有一天發(fā)現(xiàn)了Jupyter和Ipyturtle,實(shí)現(xiàn)了在網(wǎng)頁上一邊畫畫,一邊學(xué)習(xí)Python的愿望。
● 編程環(huán)境搭建
1.Jupyter簡(jiǎn)介和安裝
Jupyter的全稱為Jupyter Notebook(此前被稱為IPython NoteBook),是一個(gè)交互式筆記本,支持運(yùn)行40多種編程語言。Jupyter的本質(zhì)是一個(gè)Web應(yīng)用程序,便于創(chuàng)建和共享程序文檔,支持實(shí)時(shí)代碼、數(shù)學(xué)方程、可視化和MarkDown。很多人喜歡直接在Jupyter上寫代碼,并同步記錄學(xué)習(xí)心得,這樣的學(xué)習(xí)筆記實(shí)際上就是一個(gè)很好的教程。
除了通過Jupyter,還可以通過Web頁面運(yùn)行Python代碼和系統(tǒng)命令。開源硬件虛谷號(hào)上,就集成了Jupyter,通過訪問Jupyter頁面,就能用無線的模式來給虛谷號(hào)編程,也可以管理虛谷號(hào)上的種種應(yīng)用。如果沒有虛谷號(hào),建議安裝Winpython或者Anaconda,二者都集成了Jupyter。如果自己對(duì)Python比較熟悉,也可以自行安裝。
2.Ipyturtle簡(jiǎn)介和安裝
顧名思義,Ipyturtle是Jupyter的插件,用于在Jupyter上模擬海龜,即Jupyter上的Turtle畫畫。Ipyturtle的語法和Turtle也基本一致,僅有幾個(gè)常用的動(dòng)詞。例如,forward為前進(jìn),back為后退,right和left分別表示右轉(zhuǎn)和左轉(zhuǎn)。訪問官方開源網(wǎng)站,可以得到具體的文檔資料。
Ipyturtle的Github地址:https://github.com/gkvoelkl/ipython-Turtle-widget。
和其他的Python庫(kù)類似,Ipyturtle可以用pip或者pip3命令安裝,但首先需要安裝Jupyter。安裝命令如下:
pip install Ipyturtle Jupyter nbextension enable --py --sys-prefix Ipyturtle
Jupyter安裝好后,可以視為計(jì)算機(jī)上安裝了一個(gè)默認(rèn)端口為8888的Web服務(wù)。在命令行中輸入Jupyter,即可啟動(dòng)這一服務(wù)。
Jupyter的訪問地址為:http://[ip地址]:8888,如果訪問的是本機(jī),可以直接用127.0.0.1作為IP地址。
● 開始畫畫吧
1.顯示我的畫布
在Jupyter的頁面中新建一個(gè)Python3文件,這時(shí)將新建一個(gè)筆記。在筆記的文本框中輸入如圖1所示的代碼,然后點(diǎn)擊“運(yùn)行”,看一看,網(wǎng)頁上是不是出現(xiàn)了一張帶箭頭的圖片(如圖2)。注意:如果網(wǎng)頁沒有出現(xiàn)圖片,請(qǐng)使用谷歌瀏覽器訪問Jupyter。
然后,在新的文本框中輸入“t.forward(60)”,看看畫面有什么變化,是不是出現(xiàn)了一條直線(如圖3)。
這里對(duì)Ipyturtle的常見語法做簡(jiǎn)單介紹。
(1)“from Ipyturtle import Turtle”的作用是在Ipyturtle庫(kù)中導(dǎo)入Turtle模塊。
(2)“t=Turtle()”表示建立Turtle對(duì)象,名稱是t。直接輸入t,網(wǎng)頁上就能顯示畫布。“t.close()”表示關(guān)閉畫布?!皌=Turtle(fixed=False, width=100, height=100)”表示建立一個(gè)寬度和高度為100像素的畫布。
(3)“t.forward(60)”表示前進(jìn)60,“t.back(20)”表示后退20,單位是像素。
(4)“right(10)”和“l(fā)eft(10)”表示右轉(zhuǎn)和左轉(zhuǎn)10,單位是角度。
怎么樣?命令是不是很簡(jiǎn)單?
2.畫一個(gè)矩形
畫一個(gè)矩形,其實(shí)只需要控制箭頭右轉(zhuǎn)三次90度,畫四條對(duì)稱的線。在文本框中輸入如圖4所示的代碼,看看是不是動(dòng)態(tài)畫出了一個(gè)矩形?
用如圖5所示的代碼,可以畫出三角形、圓形等。
在畫圓形的時(shí)候,我們就用到了循環(huán)語句,不然就得寫360行同樣的語句,初學(xué)者很快就體會(huì)到循環(huán)語句的重要性。需要特別強(qiáng)調(diào)的是,畫布可以另存為圖片。如果熟悉了語法,完全可以用這種方式來畫一些常見的圖形。
● 寫一個(gè)交互式筆記
Jupyter的最大優(yōu)勢(shì)在于可以編寫交互式的筆記。將輸入代碼的文本框的類型(默認(rèn)為“代碼”)換成“標(biāo)記”,即可寫上說明性文字。Jupyter的文字支持標(biāo)準(zhǔn)的MarkDown語法,能夠輸入段落、列表、超鏈接和數(shù)學(xué)公式等不同格式的文本。MarkDown是程序員常用的一種純文本格式的標(biāo)記語言,通過簡(jiǎn)單的標(biāo)記語法,可以使普通文本內(nèi)容具有一定的格式。
我們把探索、測(cè)試Ipyturtle語法的過程,即在網(wǎng)頁上畫畫的過程,一步一步記錄下來,在代碼旁邊增加說明性文字,這就完成了一個(gè)交互式筆記(如圖6)。這既是學(xué)習(xí)筆記,也是一個(gè)支持在線運(yùn)行代碼的交互課件。
將自己編寫的筆記保存為.ipynb格式,就可以分享給其他人使用。開源硬件虛谷號(hào)上已經(jīng)整合了筆者寫的各種交互式編程筆記,打開無線模式即可使用。
西蒙·派珀特認(rèn)為,計(jì)算機(jī)是一種新的表達(dá)工具,用Logo語言可以幫助孩子們用更好的方式學(xué)習(xí)數(shù)學(xué)和編程。在筆者看來,用畫畫的形式來熟悉Python語法,是很不錯(cuò)的選擇。尤其是在虛谷號(hào)和Jupyter的支持下,打開瀏覽器就能學(xué)習(xí),降低了學(xué)習(xí)門檻。Ipyturtle的功能雖然很簡(jiǎn)單,但如果結(jié)合網(wǎng)絡(luò)爬蟲、百度AI和板載Arduino等功能,畫畫會(huì)更加有趣。例如,用畫圖的形式呈現(xiàn)各種傳感器數(shù)據(jù),讓物聯(lián)網(wǎng)數(shù)據(jù)可視化,能更好地激發(fā)學(xué)生的學(xué)習(xí)興趣。