計算機 2 ( 加減乘除 )
這篇文章會延伸「計算機 1 ( 顯示數字 )」的範例,在 Scratch 裡使用函式、分身、變數、清單、廣播訊息、邏輯判斷、變換造型...等積木,實作一個可以真的可以進行加減乘除的計算機。
開啟範例
本篇教學為「計算機 1 ( 顯示數字 )」一文的延伸,請先開啟範例進行編輯。
積木程式原理 ( 按鍵 )
從左側積木清單,新增 a、num2 兩個變數,以及 icon_list 和 num_list 兩個清單。
- 變數 a:取得對應清單的項目。
- 變數 num2:記錄要計算的數字,和 num 變數搭配。
- icon_list:記錄加減乘除符號。
- num_list:記錄數字。
因為數字和加減乘除的符號有一對一的對應性,但又不屬於同一個種類,所以使用兩個清單分別記錄,再根據一對一的順序取出,就能進行計算。
新增一個名為「清空」的函式,在點擊綠旗時執行函式,清空函式內容如下:
- 刪除 num_list 和 icon_list 的內容。
- 設定變數 num 和 num2 為 0 ( 計算機起始值為 0 )。
- 設定變數 a 為 1,使用清單記錄時,從第一個項目開始。
修改「當分身產生」的程式:
- 刪除 icon 變數,改成「添加造型名稱到 icon_list」。
- 新增「添加 num 到 num_list」( 將目前畫面上的數字加入 num_list )。
- 新增「廣播訊息 input 並等待」( 讓畫面顯示數字,等待完整顯示後再進行下一個動作 )。
- 如果是點擊符號按鍵,就將 num 設為 x ( 後續判斷使用 )。
- 如果是點擊數字按鍵,額外判斷如果 num 為 x,也將變數 num 設為對應的造型。
設定變數 num 為 x,主要作為判斷是否按下數字鍵,因為到時候會透過 icon_list 和 num_list 兩個清單來判斷要進行哪些數字的計算。
新增一個名為「計算」的函式 ( 勾選執行完畢再更新畫面 ),編輯函式內容:
- 判斷如果 num_list 的長度如果大於 0,表示已經有數字在等待計算。
- 將變數 a 設為 1 ( 準備從清單的第一個項目開始 )。
- 設定 num2 為清單的第 a 個項目。
- 使用重複次數積木,重複「num_list 長度 - 1」次 ( 因為 a 從 1 開始 )。
- 設定 num 為 num2 計算後的數值。
新增一個名為「判斷加減乘除等於」的函式 ( 勾選執行完畢再更新畫面 ),編輯函式內容:
- 判斷如果 num_list 的 a-1 項目數值是 x 不成立 ( 表示該項目為數字 )。
- 如果 icon 的 a 項目是加號,執行:
- num2 等於「num2 + num_list 的 a+1 項目數值」。
- 如果 icon 的 a 項目是減號,執行:
- num2 等於「num2 - num_list 的 a+1 項目數值」。
- 如果 icon 的 a 項目是乘號,執行:
- num2 等於「num2 x num_list 的 a+1 項目數值」。
- 如果 icon 的 a 項目是除號,執行:
- num2 等於「num2 / num_list 的 a+1 項目數值」。
因為按下加減乘除或等於時,必須先計算出前面數值的運算結果,所以數值清單 num_list 使用 ( a、a+1 ),而 icon_list 使用的是 a。
新增一個名為「判斷按下 AC」 的函式 ( 勾選執行完畢再更新畫面 ),編輯函式內容:
- 如果 icon_list 的長度為 0,表示還沒有按過加減乘除,就執行清空函式,讓畫面歸零。
- 如果 icon_list 的第 a 項為 AC,表示按下了 AC,執行清空函式。
按照下圖修改「計算」函式內容,執行對應函式:
「計算」函式完成後,修改「當分身產生」積木,加入執行「計算」函式積木。
積木程式原理 ( 符號 )
點擊「符號」角色,將原本程式裡的 icon 變數換成 icon_list 的第 a 項。
積木程式原理 ( 數字 )
點擊「數字」角色,因為計算時可能會有「小數點」,所以要針對小數點的「間距」做調整:
- 修改「顯示數字」函式:
- 加入判斷如果造型名稱為「.」,表示該項目為小數點,就讓 x 只移動 10 點,否則就移動 40 點 ( 小數點和右邊數字的間距 )。
- 修改「當分身產生」程式:
- 加入判斷如果造型名稱為「.」,表示該項目為小數點,就讓 x 改變 -15 點 ( 小數點往左邊移動 15 點 )。
完成結果
完成後,點擊綠旗,舞台上就會出現一個計算機,可以進行簡單的加減乘除計算。
範例解答
範例解答:計算機 ( 顯示數字 )
延伸練習
如果已經熟悉了計算機 ( 顯示數字 )的原理,還可以嘗試更多好玩的作法:
- 再進行除法時,會出現小數點太多的狀況,嘗試修改為四捨五入到小數點兩位 ( 解答 )
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~