資訊內(nèi)容
第10課 統(tǒng)計集成——自動生成柱狀圖
第10課 統(tǒng)計集成——自動生成柱狀圖
任務(wù)導(dǎo)航
在上一課中,我們研究了“從1到6間隨機選一個數(shù)”這個代碼,數(shù)據(jù)分析的環(huán)節(jié)是用Excel完成的,我們是否需要在Scratch中編寫一個軟件來完成數(shù)據(jù)的分析呢?這相當于編寫一個科學(xué)研究軟件,需要考慮軟件編寫的必要性。自編軟件的優(yōu)點是省去了數(shù)據(jù)導(dǎo)出→Excel分析的過程,自編軟件可能會節(jié)省時間,但缺點是需要開發(fā)的時間。但如圖10.1所示如果自編的軟件能夠比原來的Excel分析結(jié)論更加直觀形象,就很有必要自編軟件。同學(xué)們,你肯接受挑戰(zhàn)么?
圖10.1 隨機選數(shù)結(jié)果的柱狀圖
任務(wù)分析
Follow Me
1. 分析軟件需求及目標
編寫一款軟件,首先需要明確想要編一款什么樣的軟件,初級目標、中級目標、高級目標分別是什么。中級目標是軟件要核心完成的任務(wù),完成了中級目標,軟件的編寫就算成功。初級目標是基礎(chǔ)研究,是基于現(xiàn)有的水平和時間,將中級目標進行的簡化,有時是完成核心代碼,有時是積累一些基礎(chǔ)的數(shù)據(jù)。高級目標時在中級目標基礎(chǔ)上的提升,有時是軟件原理上的創(chuàng)新,有的是小改進,可以算作是對軟件的進一步地追求。初級目標、中級目標和高級目標,都要圍繞著同一個“核”,這樣軟件的編寫才科學(xué)、高效。
想一想:
分析300個隨機數(shù)中1到6的數(shù)目,這個軟件的三級目標是怎樣的?
我們可以這樣整理三級目標,如表10.1所示。
表10.1 三級目標
中級目標 | 鏈表中有300個數(shù)由從1到6的300個數(shù)據(jù)組成,編寫出一個軟件,統(tǒng)計出每個數(shù)字出現(xiàn)的次數(shù) |
初級目標 | 只統(tǒng)計出1出現(xiàn)的次數(shù) |
如圖10.1所示 | 如圖10.1所示 |
高級目標 | 用柱狀圖反映出每個數(shù)字出現(xiàn)的次數(shù),甚至表現(xiàn)出每個數(shù)字出現(xiàn)的次數(shù)相對于總次數(shù)的百分比 |
2. 算法及程序設(shè)計
從表10.1中可以看出,初級目標是為了解決這個程序的核心算法。算法是指程序中解決問題的核心方式,大部分的算法都可以從生活中得到啟示,比如“在1和6間隨機選一個數(shù)”這種隨機算法,就與生活中的擲色子問題對應(yīng)。這種聯(lián)系生活研究編程算法的思考方式,稱為生活算法。那么找到300個隨機數(shù)中1的個數(shù)與生活中的那個過程類似呢?
比如,有一個袋子里面裝著300個標有1到6六個數(shù)字的乒乓球,每次只能從瓶口拿出一個乒乓球,如果是1就放在另外一個袋子,不是1就扔掉。這個過程用代碼表示時,如圖10.1所示。
圖10.2 統(tǒng)計鏈表中數(shù)字1出現(xiàn)的數(shù)目代碼
想一想
- 編寫圖10.1所示的代碼的過程中,需要新建那些變量?
- 如果鏈表中超過了300組數(shù)據(jù),圖10.1中的代碼還能不能解決?
- 圖10.1的代碼可以完成初級目標,那如何修改一下它,讓其完成中級目標呢?
DIY
編寫一個可以統(tǒng)計1到6六個數(shù)字的代碼,從變量的角度要從圖10.1的代碼中新建那些變量,從代碼的角度,統(tǒng)計數(shù)字2出現(xiàn)次數(shù)的代碼應(yīng)該放在那個位置,與統(tǒng)計數(shù)字1出現(xiàn)次數(shù)的代碼相比有什么區(qū)別。核心代碼如圖10.3所示。
圖10.3 統(tǒng)計每個數(shù)字出現(xiàn)的次數(shù)
想一想
1.如果讓鏈表中存儲6000個隨機數(shù),然后讓程序自動分析結(jié)果怎么做?完成這個實驗,程序運行需要多長時間,是不是比Excel的方法快?
2.如何讓結(jié)果可視化呢?
3.如果你使用圖10.2所示的超速模式運行程序,你會發(fā)現(xiàn)程序運行的速度會提高10倍。
圖10.2 超速模式下程序執(zhí)行的速度會大大加快 |
3. 生成柱狀圖
柱狀圖的每個柱可以使用繪圖編輯器完成,柱的高度要大于150個像素,注意需要選擇“設(shè)定旋轉(zhuǎn)中心”工具,將旋轉(zhuǎn)中心設(shè)定為紅色柱的頂端,如圖10.3所示。
圖10.3 繪制每個數(shù)字次數(shù)代表的圓柱
想一想
如果能夠在計數(shù)完成之后自動生成柱狀圖,程序的效果就大大提升了,請你思考一下,需要增添那些新角色?
圖10.4所示的代碼,可以將柱狀圖紅色部分的上沿和數(shù)字1的數(shù)目保持一致。制作6個這樣的角色,就可以實現(xiàn)柱狀圖效果了,最后用一個灰色的色塊將所有彩條的下緣擋住,只保留縱坐標大于0的那部分,這樣,柱狀圖就完成了,如圖10.5所示。
圖10.4 生成柱狀圖 |
圖10.5 自動生成柱狀圖 |
DIY
如果將圖10.4改進為圖10.6所示的代碼,可以顯示出每個數(shù)字出現(xiàn)數(shù)目占總數(shù)的百分比。
圖10.6 超速模式下程序執(zhí)行的速度會大大加快 |
如果我們換一個思路,不從分析已有鏈表的數(shù)據(jù)出發(fā),將實驗的過程理解為:擲一次色子,得到那個點數(shù),就在該點數(shù)所在的一欄加1,最后統(tǒng)計每個點數(shù)出現(xiàn)的次數(shù)和百分比,程序會有什么樣的變化?圖10.7給出了一個參考的思路
圖10.7 將隨機數(shù)的產(chǎn)生、識別計數(shù)、分析一體化的代碼 |
圖10.8是12萬組數(shù)據(jù)匯總后的結(jié)果,看看是不是每個數(shù)字的出現(xiàn)的可能性是六分之一。
圖10.8 12萬組數(shù)據(jù)的分析結(jié)果 |
知識著陸
- 腳本:刪除鏈表中的第1項,鏈表的長度
- 設(shè)計:如何生成一個柱狀圖
- 編程習(xí)慣:在程序編寫時,設(shè)計初級目標、中級目標和高級目標
創(chuàng)作天地
- 分析圖10.9所示的代碼,那些代碼是相似的結(jié)構(gòu)?
圖10.9 分析代碼的相似性 |
- 如果使用圖10.1所示的代碼,鏈表最后就被清空了,這樣原始數(shù)據(jù)就難以保存下來。一位同學(xué)做了圖10.10所示的改進,請分析一下代碼執(zhí)行的過程。
圖10.10 使用變量i來掃描鏈表中的所有數(shù)字 |
視野拓展
有一位同學(xué)制作了一只“機器老鼠”每碰它一下,就前進一1秒,如圖10.11所示
10.11 機器老鼠
但是它發(fā)現(xiàn)老鼠1秒鐘移動的距離穩(wěn)定地在40左右的幾個數(shù)之間變化,你能幫助他研究一下都可能出現(xiàn)那幾個數(shù),在多次實驗的過程中每個數(shù)出現(xiàn)的百分比是多少,此外這支機器老鼠能不能有避障之類的其他功能呢?在http://scratch.mit.edu/users/towujunjie介紹了用Scratch制作一個虛擬機器人的方法,同學(xué)們可以試一試。

- 上一篇
第9課 隨機探秘——數(shù)據(jù)的導(dǎo)出和分析
第9課 隨機探秘——數(shù)據(jù)的導(dǎo)出和分析 任務(wù)導(dǎo)航色子恐怕是生活中最常見的隨機現(xiàn)象了,本課,我們使用Scratch編寫一個模擬投擲色子過程的小程序,讓小貓說出色子上當前的點數(shù),如圖9.1所示。通過多次
- 下一篇
第11課 二百club——計時器和散點圖
第11課 二百club——計時器和散點圖 任務(wù)導(dǎo)航在數(shù)字科學(xué)家的小圈子里面,有一個叫200俱樂部(200club)的精英團體,加入的標準是30秒內(nèi)可以按200次空格。之所以成立這個俱樂部,是因為許多電腦游戲中涉及到每分鐘電子次數(shù)這個概念,一分鐘內(nèi)按鍵的次數(shù)越多,說明按鍵速度