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