<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                #從Scratch到Python——python turtle #### 一種比pygame更加簡潔的實現 ![](http://upload-images.jianshu.io/upload_images/1108512-32ff0bfe9d921af3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) >現在很多學校都開設了Scratch課程,學生可以利用Scratch創作豐富的作品,然而Scratch之后的圖形化編程語言學習什么內容,是一線老師和Scratch官方共同關注的問題。 轉載請注明出處:http://www.jianshu.com/p/99729c45c839 就目前來看可以選擇的有C語言、Logo、Python和SmallBasic。就我個人而言是傾向于Python的。因為C語言雖然經典,但是學了很久也不能做出可視的成型的作品,極大的降低了孩子們的積極性;Logo語言僅僅是一門玩具型的編程語言;Smallbasic和Logo語言的情況類似;而Python語言已經做為編程入門語言得到了廣泛的任何,相比于c語言,入門簡單,而且Python可以用很少的代碼完成復雜的工作,在以后的工作學習中都會用到,對于一般人來說C語言是屠龍之技,即便是在大學里的C語言通修課也是如此,而且目前部分大學的已經開始慢慢的把通識課的入門編程語言改成Python了。畢竟人生苦短我用Python呢。 但是Python作為一種文本編程語言,對于小學生來說還是有一定難度的,所以從Scratch到Python肯定需要一個過渡,我對于這個問題思考了很長時間,我覺得在學習了Scratch基礎上,結合Scratch來學習Python是合適的。 學習任何一種編程語言,首先要了解諸如變量、循環、分支判斷這些基本的程序結構,經過Scratch的學習,學生對于這些概念基本掌握,在學習Python的時候,用Scratch來描述程序,作為思維可視化的工具,有助于學生快速的掌握Python。 閑言少敘,下面我們就開始Python的學習,話說如果一開始就講Python的變量肯定會被吐槽,全部是文本,黑咕隆咚的窗口,沒什么意思啊,那么們就從窗口開始。 ## 安裝Python (從官網下載Python 3.6如果是xp下載3.5,然后看下基本的Python安裝和使用介紹,啟動IDLE) ## 啟動IDLE 安裝python之后,開始菜單,python,IDLE,就可以啟動了。 ## 神奇的小烏龜 在正式學習Python之前我們先來體驗下用Python來繪制圖形,如果你看不懂也沒有關系,先照著教程把代碼查下來就是了,就像是聯系書法開始肯定有個臨摹的階段,我們先體驗,后面詳細講解為什么這么做 下面我們隆重的請我們的Python小烏龜入場。 首先在IDLE的代碼編輯器輸入以下代碼 ![forward90.png](http://upload-images.jianshu.io/upload_images/1108512-16b34fbd10e3d1e0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 然后單擊運行 ![runmenu.png](http://upload-images.jianshu.io/upload_images/1108512-4d3d989500270d69.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### 解釋 我們來解釋下這段代碼 ``` from turtle import * ``` 是從Python的庫中導入turtle這個類,當導入的時候,其實小烏龜已經存在了,只是我們看不到而已。當你通過 ``` forward(90) ``` 命令讓小烏龜前進90個單位的時候憊懶的小烏龜才出現在舞臺上,forward的意思是前進,forward后面括號里的是參數,描述烏龜前進的距離,這是一個固定的寫法。 ![90rst.png](http://upload-images.jianshu.io/upload_images/1108512-5731b445748a501c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 是不是覺得眼熟呢,在Scratch,是不是有點像Scratch里面讓小貓動起來呢? ![mblock90.png](http://upload-images.jianshu.io/upload_images/1108512-504a636856160d80.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 在turtle里面,默認畫筆是落下的,所以小箭頭移動的時候就會畫圖,我們記得scratch里面有一個抬筆積木,在turtle也有,不過是 ``` penup() ``` ![penupf.png](http://upload-images.jianshu.io/upload_images/1108512-805669494c0f2ec0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ``` from turtle import * # 神龜前進100單位 forward(90) penup() # 抬筆 forward(90) ``` 首先我通過```penup()```命令抬筆,然后利用```goto(10,90)```命令讓小烏龜移動到(10,90) 其實這個時候,調用前面的向前移動forward命令也不會留下痕跡的 ![penupf.png](http://upload-images.jianshu.io/upload_images/1108512-e59aca51a12efaf3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 繪制正方形 下面我們來繪制一個正方形,首先我們用scratch來實現繪制正方形這個功能,我們用最簡單的順序命令來實現 ### Scratch程序繪制正方形 ![scratchqur.png](http://upload-images.jianshu.io/upload_images/1108512-fa845a3de30a16ef.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 可以看到 +首先拖動綠旗模塊到舞臺 +然后清空舞臺 +落筆 +讓小企鵝前進90步,然后右轉90°,等1s鐘 +重復以上步驟四次 +抬筆,準備下一次繪圖 這是一個典型的繪制正方形的程序,采用了順序結構來編制程序,便于理解。 接下來我們用python中的turtle庫實現這個程序 ### Python版本的正方形繪制程序 ![pythonqur.png](http://upload-images.jianshu.io/upload_images/1108512-03d6819de036eeea.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ``` from turtle import * # 神龜前進100單位 forward(90) right(90) forward(90) right(90) forward(90) right(90) forward(90) right(90) ``` 看,雖然一個是圖形編程,一個是文本編程,但是都成功的繪制出了正方形。下面我繼續完善,我們知道在Scratch中是可以改變畫筆屬性的,比如畫筆粗細,畫筆的顏色等等,在python也是可以的,看下面的表格 |-|-|-| |-|-|-| |Scratch代碼塊|Python命令|作用| |![](http://upload-images.jianshu.io/upload_images/1108512-2984fed3ddfb9b8b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)|```pencolor()```|設定畫筆顏色,用顏色選擇器選擇顏色| |![](http://upload-images.jianshu.io/upload_images/1108512-b8cd0e0ff533ed2b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)|```pencolor()```|Scratch通過數值,python通過顏色字符串設定顏色| |![](http://upload-images.jianshu.io/upload_images/1108512-01fc14ecf6984274.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)|```pensize()```|設定畫筆粗細| 比如我們要畫一個邊框粗為4,顏色為紅色的正方形 #### Scratch版本 ![scratch4.png](http://upload-images.jianshu.io/upload_images/1108512-8a100edf5015d0a3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) #### Python版本的畫正方形 ![red4.png](http://upload-images.jianshu.io/upload_images/1108512-319d29330e50e779.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 代碼如下 ``` from turtle import * # 神龜前進100單位 pensize(4) pencolor("red") forward(90) right(90) forward(90) right(90) forward(90) right(90) forward(90) right(90) ``` 可以看到,我們用python里面的命令完成了與scratch相同的功能,是不是相當有趣呢? ## 變量 前面我們畫了一個邊長為90的正方形,如果我們想讓正方形的邊長是100怎么辦呢?我們先來看最原始的方法,那就是把scratch或者Python中代表邊長的數字90分別改成100: ![100.png](http://upload-images.jianshu.io/upload_images/1108512-150e0178abfe2dab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 你會發現這次不是正方形啊,哦,原來是我把最后一個右轉90°,也改成100,導致右轉了100°,你看,這樣一個個的修改不僅麻煩,而且容易出錯,怎么辦呢,我們用一個變量代表邊長。 ***變量是一個容器,里面存放著代表邊長的數字。*** #### 在Scratch中新建變量 經過前面多學習,大家已經掌握了在scratch中新建變量,下面我們新建一個代表邊長的變量side,然后把程序中代表邊長的100改成變量side ![side2.png](http://upload-images.jianshu.io/upload_images/1108512-7a05f140d2b4b506.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 然后我們改變side值,就可以輕松的繪制不同邊長的正方形了 #### 在Python中新建變量 python是一種解釋語言,無需聲明就可以新建變量,新建變量只需要用下面的語法 ``` side = 100 ``` 這樣就新建了一個side變量,代表100,這里的```=```等號的含義是,把右側100的值放到變量side中,side代表100. 我們看如何用python來實現用變量來代表數值繪制正方形 ``` from turtle import * # 神龜前進100單位 side = 100 pensize(4) pencolor("red") forward(side) right(90) forward(side) right(90) forward(side) right(90) forward(side) right(90) ``` ![pyside.png](http://upload-images.jianshu.io/upload_images/1108512-ade8ea0e6c0af5d9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) >那么,親愛的朋友,你能夠新建一個angle變量,代替角度嗎? ## 重復循環 在日常生活中,我們經常會遇到一個枯燥而重復的事情,為了從這些勞動擺脫出來,人們發明機器以及機器人,代替人類完成這些枯燥重復的事情。與人類不同的是,計算機特別擅長做簡單重復的事情,效率和準確率比我們人類要高很多。通過合理的使用重復循環,我們可以大大提高程序的效率。 ``` from turtle import * forward(90) right(90) forward(90) right(90) forward(90) right(90) forward(90) right(90) ``` >仔細觀察以上代表,是不是,是不是感覺有很多地方是重復的呢?一般在計算機中超過三次重復就可以考慮使用循環來簡化代碼 在scratch中,控制積木分類中有重復積木: ![loop1.png](http://upload-images.jianshu.io/upload_images/1108512-c620c011b45e78d2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 下面我們利用scratch中的循環來簡化代碼 ![loop2.png](http://upload-images.jianshu.io/upload_images/1108512-cec42eaf793801d2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 仔細觀察以上代碼,想一想在重復4次內部應該放入那些積木塊呢?這樣代碼是不是簡單了很多? #### Python循環 python中的循環,需要用到```for...each...```語句,在這里會涉及到python一個非常有意思的地方,縮進語法 ``` from turtle import * for each in range(4): forward(90) right(90) ``` 執行以上代碼,會發現,出現了一個正方形,需要注意的是,```forward(90)```以及```right(90)```語句比for縮進了4個空格,這也是python的特點之一,縮進語法,這是for的固定寫法,大家要知道,而且一定不要漏掉冒號哦。 ## 更多類似 有人說,不是python turtle小烏龜嗎,為什么只有箭頭呢?scratch舞臺上有各種各樣的角色,python turtle只有個箭頭是不是太寒酸了呢?turtle也可以多種多樣哦! 需要改變箭頭的形狀要用到```shape()```命令,下面我們來試一下 ``` from turtle import * shape('turtle') for each in range(4): forward(90) right(90) ``` ![shape.png](http://upload-images.jianshu.io/upload_images/1108512-3cd87024550fe8a6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 有沒有覺得小烏龜太小了?我們來改變小烏龜的大小 ``` from turtle import * shape('turtle') shapesize(5,5,5) for each in range(4): forward(90) right(90) ``` 運行以上代碼,是不是發現小烏龜變大了呢? ![shapesize.png](http://upload-images.jianshu.io/upload_images/1108512-315d6ca9d2a153bb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 當然python turtle中小烏龜的形象不僅可以是小烏龜,箭頭,還是是圓和正方形。 >小結:python urtle某種程度上跟logo小烏龜是比較類似的,肯定有人會疑問為什么不直接學習logo呢?因為logo基本上已經被淘汰了,我們最主要的目的還是學習python,python turtle以及結合scratch只是防止單純的學習python過于枯燥的弱點,當然真正的掌握了python以后就不會有這樣的感覺,基本上scratch大部分功能都可以用python turtle來實現,這樣就可以順利的幫助小孩子從scratch過渡到python。 ## 先來看最經典的例子 在scratch教程中,一般開始都是先做一個小貓來回跑動的例子,來吸引小盆友,python turtle做這樣的例子其實很簡單的,我們先來看用scratch怎么做: ![scratchmove.png](http://upload-images.jianshu.io/upload_images/1108512-322a770539ad5c6e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 下面我們用python來實現,現在看不懂不要緊,看完后面的就能看懂了。 ``` from turtle import * shapesize(4,4,4) penup() x = 0 v = 5 while 1: goto(x, 0) x += v if x < -200: v = -v # 當箭頭到了左側邊界,讓x增加 if x > 200: v = -v # 黨建頭到了右側邊界,讓x減少 ``` 以上代碼實現了箭頭來回走動,其實原理很簡單的```v = 5```跟 ![move10.png](http://upload-images.jianshu.io/upload_images/1108512-62bcda50b5857d93.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 的作用類似,是用來設定角色移動的速度,而與 ![bound.png](http://upload-images.jianshu.io/upload_images/1108512-3ff204365db8ed77.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 對應的則是以下代碼: ``` if x < -200: v = -v if x > 200: v = -v ``` 我來解釋下這段程序,首先導入必要的庫,然后利用```shapesize()```命令設置箭頭的大小,然后```while```循環的作用于scratch的重復類似,不停的執行以下代碼,首先讓箭頭移動到(0, 0)坐標,然后把x坐標增加步數v,然后判斷改變后的x坐標是否大于200,大于200則意味著箭頭超過了右側的邊界,那么x就應該向相反方向移動,這也就是scratch中的 ![bound.png](http://upload-images.jianshu.io/upload_images/1108512-81072a08177cbde5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 含義,本來向右移動是讓x坐標不斷的增加步數v,如果要向左移動,就要減去步數,所以當箭頭的橫坐標大于x的時候就讓x減去步數;同樣的當x的坐標比-200小時,意味著箭頭到了左側邊界,那么不再讓x坐標減去步數v,而是讓x坐標增加。 ## 關于事件 在scratch中事件是很常用的功能,比如當鼠標被單擊的時候,角色說話: ![scratchclick.png](http://upload-images.jianshu.io/upload_images/1108512-e8ea950012f9f9c2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 其實小烏龜也是可以的,不過呢這里要用到函數的功能,不知道各位看官在Scratch里有沒有學習函數的功能呢,這里要介紹python里面函數的語法 ``` def function_name(): pass ``` 可以看到,首先要有def關鍵字,然后空一格,然后是函數名,括號以及冒號,冒號是必不可少的內容! ``` from turtle import * shape('turtle') def sayhello(x, y): write('2007-2017高考十年') onclick(sayhello) ``` ![gk10.png](http://upload-images.jianshu.io/upload_images/1108512-bc53a5f16cf5a1df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 運行上述代碼,會發現當你單擊小烏龜的時候,小烏龜會說出我們指定的話語,'2007-2017高考十年',有沒有很唏噓。 這里需要注意但是函數sayhello有兩個參數x,y分別代表小烏龜當前的橫縱坐標。同時onclick函數的參數,是一個函數名,這里面涉及到了回調,當然我們知道怎么一回事就可以了,當你希望被單擊的時候執行那個函數對應的功能呢,你就在onclick的參數里面寫上這個函數就可以了。 ## 關于動作積木塊的類比 |-|-|-| |-|-|-| |Scratch代碼塊|Python命令|作用| |![](http://upload-images.jianshu.io/upload_images/1108512-0126767717561745.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)|```setx()```|設定x坐標| |![](http://upload-images.jianshu.io/upload_images/1108512-77864f80bb1c61da.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)|```sety()```|設定y坐標| |![](http://upload-images.jianshu.io/upload_images/1108512-b5d7f80532ffd2ac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)|```xcor();ycor()```|獲取xy坐標|
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看