資訊應用競賽連結
如何使用bDesigner的blockly
1.先進入到這個網站
離線版本
./blockly-ai/demos/code/index.html
2.請在google下搜尋google gemini api key或Google AI Studio API key
3.找尋搜尋結果為Google AI Studio API key
4.點進去後
5.點選右上角的Create API Key後會跳出這個視窗
6.點輸入框後,隨便選一個就可以
7.按下Create API key in existing project
8.點一下後面的Copy
9.打開blockly,看一下右邊,將API key填入
10.輸入下面問題
請幫我產生一個程式設計的題目
11.接著點一下送出,稍微等一下就會產生題目
12.如果覺得題目太長,可以限制他的字數
請幫我產生一個簡單的程式設計題目,題目字數不超過300個字
13.產生的題目
PS. 有時網路的關係會顯示API KEY有問題 重新按下送出即可
簡單的拚一個錯誤的積木組
按下測試的按鈕
程式就可以執行
接下來按下送到Gemini
就可以取得AI的評分結果
想要難一點的題目
Scratch版本
https://bdesigner.star-kids.info/blockly1/index.html
用法跟blockly一樣
但注意的是個人使用是
1. Scratch的副檔名是m3,Blockly則是m5
2. 執行程式是
線上平台
https://bdesigner.star-kids.info/blockly2/index.php
左上角Scratch空白試卷跟Blockly空白試卷是提供給比賽用
我們先點第一個臨時屋,你會看到右邊有題目
開啟臨時屋的m3積木
載入後,點選
你就可以看到它在驗資
空白試卷展示
空白試卷允許你可以把題目跟驗資一起上傳,所以當我們開啟Scratch空白試卷
你可以發現多了個
匯入題目後,右邊就出現了
並且這個匯入後,你就可以使用所有內部的測資
離線空白試卷
離線空白試卷,主要是提供考試時,希望離線使用而做,啟動後畫面
可以點選題號,然後進入使用內建的題目,可以修改題目跟測資資料!
為什麼要挑blockly
讓我們先看下面這個全國賽提供的題目
以第一個範例輸入為例,你有發現他的輸入值為
9
3
10 5 15
你有發現到,最後一個輸入為 10 5 15三個數字,而且每個輸入範例輸入的數字都不一樣,因此你不能夠用變數去儲存,你得用scratch清單,而且,因為使用者的輸入有可能是一位數的0-9,也可能兩位數的10-99,如果你用scratch去處理
你才有辦法得到正確的清單可以使用
平台可以允許
但你要思考一件事,現在各地比賽都採手動輸入,這樣打入,我個人感覺跟題目不符
但如果你用blockly
請你看list變數,他一個積木就做出你要的清單效果
另外一個問題就是,scratch它是用來做遊戲的,對於一些需要排序等問題,scratch會非常難做,我現在出一題,你們可以試著想看看,如果最後有時間,我們再來解這題
那你或許會問,blockly就都沒問題嗎?
我將目前轉換成blockly,已知的問題做個歸類!
變數與輸入輸出
Blockly的輸入輸出(輸入是有文字跟數字的差別)
Blockly變數也是有文字跟數字的差別的
清單的使用
下面我們要介紹一些scratch沒有的功能:
1.把使用者的輸入轉成清單(分隔符號是有空格):
其他運算符號都可以用來做分隔符號
2.清單的數字排序
Blockly有提供排序,以後都不用怕排序的題目
3.清單的運算
清單是可以做整個一個加減乘除,找最大跟最小,所以如果今天的題目要你找出清單中最大的或最小,都可以使用這個功能,這個積木躲在數學裡面
迴圈範例
Blockly提供的迴圈有這些,迴圈很重要,通常來說我們前面用清單,後面就需要迴圈把它一一讀出來
第一個makecode常用
第二個其實是while的用法
第三個一般程式語言都有
第四個清單專用(他寫列表,其實一樣)
下面我們舉例最後兩個
1.用第三個時,注意是從1開始
2.這個迴圈是清單專用
Blockly的使用陷阱
第一個陷阱是,沒有提供數字轉字串或字串轉數字的積木,所以,有時是有問題的。
1.問題1:文字加數字會變成文字和文字相接,但其他運算是可以的。
解決方法:
除了加以外,經過其他數學運算(包含數字排序、列表用的迴圈),都可以變成數字,例如:
你可以直接減0
邏輯判斷可以不用轉換
這裡注意,連這樣也是不行的歐
但其他沒這個困擾
2.問題2:如果是輸入轉清單或者是用多個清單輸入,不用建立一個空清單,但是如果是直接用或取得設定清單來使用,你會發生錯誤,你一定得先宣告一個空清單。
正確寫法1:
正確寫法2:
寫一個最簡單的blockly基礎
請輸入數列有幾個數字
這個數列有多少
範例輸入
範例輸出
範例說明
3
50 30 20
100
50+30+20=100
2
40 35
75
40+35=75
這個題目算是基本題,最主要是迴圈的使用
超商收銀結帳
顧客到超商購物,收銀機會依序讀取購買的每樣商品價格。
最後顧客拿出一筆錢付款。
請你設計程式:
先計算所有商品的總金額。
如果付款金額大於或等於總金額,輸出應找的金額。
如果付款金額不足,輸出:付款金額不足
輸入格式
第一行:一個整數 N,代表購買的商品數量。
第二行:輸入 N 個整數,代表每樣商品的價格。
第三行:一個整數,代表付款金額。
輸出格式
如果付款金額足夠,輸出一個整數(應找的金額)。
如果不足,輸出 付款金額不足。
範例輸入
範例輸出
範例說明
3
50 30 20
120
20
商品總金額 = 50 + 30 + 20 = 100
付款金額 = 120
足夠付款 → 應找錢 = 120 - 100 = 20
2
40 35
60
付款金額不足
商品總金額 = 40 + 35 = 75
付款金額 = 60
不足以支付 → 輸出「付款金額不足」
4
10 20 30 40
100
0
商品總金額 = 10 + 20 + 30 + 40 = 100
付款金額 = 100
剛好付清,不用找錢 → 輸出 0
5
5 5 5 5 5
50
25
商品總金額 = 5 + 5 + 5 + 5 + 5 = 25
付款金額 = 50
足夠付款 → 應找錢 = 50 - 25 = 25
這題看似簡單,但暗藏玄機,還記得前面講過blockly再加上有問題,如果你很開心的用了一個數學積木
整個程式就出問題
不能用+不能用+不能用+(除非你用減零)
所以要改成下面這個方法