九九乘法你問我答

過去在學習九九乘法的時候,總要將答案寫在考卷或作業本裡,再由老師檢查有沒有計算錯誤,所以在這個 Webduino Blockly 的範例,會透過「語音聲控」和「語音朗讀」的互相搭配,做出電腦「發出語音」提問,學生「講出答案」,電腦就能判斷答案對不對的應用。

本篇範例會使用:變數文字邏輯列表顯示文字數學式語音聲控語音朗讀,如果尚未熟悉相關用法,請點選參考閱讀。

點擊遙控器按鈕,語音朗讀發問

打開網頁互動區,下拉選單選擇遙控器,因為這個範例的目標,將要做出「點選遙控器的按鈕,遙控器上會顯示問題並透過語音發問,回答後顯示答對與否」。

網頁互動區域 - 遙控器

設定當點擊按鈕 1 的時候,會產生一個九九乘法的問題,因為九九乘法需要兩個數字相乘,所以使用兩個變數 a 和 b,使其分別等於 2 到 9 的隨機數,再新增一個變數 r 作為 a 乘以 b 的答案,接著使用遙控器螢幕顯示的積木,顯示「 a x b = ?」的問題提示。

注意,因為語音辨識程式碼限制,變數名稱不能是 result。

點擊按鈕 1,產生一個九九乘法問題

使用語音朗讀的積木 ( 包含結束後執行的動作 ),在點擊按鈕的時候除了顯示問題,也會透過語音朗讀唸出題目,完成後可以先執行程式測試一下,點擊遙控器按鈕 1,就會聽到電腦詢問問題,且在遙控器的螢幕裡也會出現對應的問題內容。

點擊按鈕 1,電腦詢問問題,並在遙控器螢幕出現對應的內容

使用語音辨識,唸出答案並進行判斷

在語音朗讀完題目之後,放入語音辨識的積木,設定一個變數 answer 內容為語音辨識的結果,由於這邊沒有地方可以看到辨識的文字,可以使用控制台 console 來查看辨識的文字正確性。

控制台顯示請參考:控制台

使用語音辨識,唸出答案並進行判斷

因為是接收語音辨識的結果,所以必須要下達「結束」的指令,當辨識到結束的指令,就會開始判斷答案是否正確,這裡將結束的指令設定為「對不對」,透過邏輯積木的判斷,只要語句裡頭出現「對不對」三個字,就會停止辨識。

類似在野外使用對講機,一段話終止之後會加個 over ,表示結束。

接收語音辨識與下達結束指令

當語音辨識停止,放入第二層邏輯積木,如果剛剛辨識的文字裡有出現計算的結果,就認定這一題答對,否則就是答錯。

判斷答題結果

設計回答錯誤的對應邏輯

如果只進行到這一步,除了真正的回答錯誤 ( 例如 35 回答 32 ),還有一種回答錯誤是語音辨識所造成,例如阿拉伯數字 5,辨識出來可能會變成中文字的五,這時也會發生錯誤答案的狀況。

為了解決這個問題,必須要透過一些較為進階處理方式,首先建立變數 chineseArray,設定為一個「二維列表」,在第一層列表有十個空格,每個空格內是另外一個列表,有兩個空格,分別對應中文的一二三四五和阿拉伯數字的 12345。

設計回答錯誤的對應邏輯

新建一個流程 chinese,並設定一個流程內的變數 text ( 待會要把辨識的 answer 放到這個變數裡 ),接著設定一個變數 check 等於 1,作為待會邏輯判斷使用,此處的重點在於建立兩個迴圈,外層迴圈設定 i,取出 text 的每個字,取出每個文字之後,再由另外的迴圈設定 k,進行 chineseArray 的判斷。

建立新流程

在內層的迴圈,放入邏輯判斷,判斷如果 k 的第一個值是中文的一二三四五,就設定一個變數 num 為對應的阿拉伯數字。

內層迴圈放入邏輯判斷

判斷後再加入一層邏輯,如果答案是正確就顯示並朗讀「恭喜你答對了」,否則就顯示並朗讀「答錯了,正確答案是...」。

加入答題結果回應語句

然而如果全部都判斷過一次,還是沒有答案的話,就會執行並朗讀「答錯了,正確答案是...」的結果。

加入答不出題目的回應語句

最後回到剛剛的語音聲控的積木,把 chinese 的流程放進去,text 的缺口放入 answer 的變數,就大功告成了。

將新建流程放入加入

完成結果

執行程式之後,點擊遙控器的按鈕 1,就會聽見語音問九九乘法的問題,同時遙控器的畫面也會顯示題目,此時可以用講話的方式回答,回答完後唸出「對不對」三個字,就會聽見正確或不正確的答案了。

範例解答:https://goo.gl/vWbx7b

遙控器顯示九九乘法問答結果