承上一題的練習,這一次不只是加法,還要再加上減法以及乘法。同樣的,我們希望能夠以隨機的方式出題,而這次出的題目不是只有加法,還必須包括減法以及乘法(因為除法會有小數點,不好算啦),而為了簡單起見,在這一題中,我們也把出題的數字限制在1個位數(也就是1到9)。
由於此次有3個運算的方式,為了方便程式的設計,所以在運算子的方面以清單的方式來表示這3個運算子的內容,可以省掉許多的程式碼,此次使用到的變數如下所示:
如上圖所示,我們除了使用原有的變數a和b之外,多了另外一個變數operator,用來表示目前選中的是那一則運算(它的內容是1到3,分別代表加、減、乘),而另外一個清單變數op,則是用來表示運算子的符號,分別是第1個索引是「+」,第2個索引內容是「-」,而第3個索引內容則是「*」。有了這些變數,當角色被點擊的時候,第一步就是把op清單的內容設定正確的值(當然,一開始要先清除清單,以避免不斷地附加上重複的內容),接著就是取所有的隨機數,如下所示:
有了這些內容之後,接著就要詢問玩家題目,要特別注意清單在這裡的用法:
最後,在檢查答案正確性的時候要搞清楚我們要問的是加法、減法、還是乘法,此點可以由operator的內容來判斷。而由於我們需要逐一做檢查,所以會使用到巢狀的如果/否則積木,架構看起來如下:
別忘了operator是1的時候代表的是加法,2的時候代表的是減法,而3的話則是代表乘法,不管是哪一種運算,最終都是使用對應的運算式來驗算,並依玩家的回答給與適當的回饋。完整的程式積木如下:
最終執行的結果如下所示:
不過,上述的程式設計方式其實有許多重覆的決策指令,讓程式積木看起來複雜許多。如果我們打算加入更多的計算的話,那麼顯然程式的流程就會變得很難掌握,之後也容易發生錯誤。因此,還有一個簡化的方法可以使用,也就是再加上一個清單來記錄所有運算的結果,之後在比較結果的時候只要比較相對應的清單內容就可以了,如此,不管要執行幾則運算都程式都是一樣的難易度。以四則運算為例,在清單處多了一個results的清單,如下所示:
然後在一開始的時候,除了原有為清單operators加上原始計算符號之外,也要計算所有的結果放到results清單中,如下所示:
接著問問題的地方並沒有改變,還是以下的樣子:
神奇的事來了,接下來四則運算的回答正確與否,只要使用同一個判斷就可以了:
同學們,有想通了嗎?最終所有的程式就簡化成以下的樣子(多了一則運算,但是程式更簡單了):
接下來的挑戰是,回答的過程中,你可以如何記錄答對和答錯的次數呢?