這兩天葉老師問我有關Moodle的GIFT題目格式的問題,如果要使用多選題,應該如何使用符號,後來我找了moodle官方的頁面答案給她
What two people are entombed in Grant's tomb? { ~%-50%No one ~%50%Grant ~%50%Grant's wife ~%-50%Grant's father }
已經有題庫的人,可以用一些批次方法直接處理這些題目轉檔的問題,例如python,但如果是對程式陌生的人,讓他使用python的話,可能太難。
不過現在這個時代,有很多方法可以處理,例如你可以用自然語言讓AI寫出一個轉檔程式啊,像是用Claude,它的Artifacts功能甚至還可以直接在頁面旁產出程式執行的畫面。
回到本文主題,如何讓沒有程式基礎的人可以順利轉檔,那就寫一個轉檔程式來使用吧。
把以下的文字貼在記事本上,副檔名存成html,例如convert.html,用瀏覽器打開就是一個轉檔程式了。
使用方式就是打開excel,把題目複製貼到轉檔程式上方的框框,按下按鈕就生成轉檔完的文字了。
這個程式只有處理單選和多選題目而已,程式是根據標準答案來分辨單選或多選,標準答案使用123來編碼,而不是ABC
===================
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>轉換工具</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
}
textarea {
width: 80%;
height: 300px;
margin-bottom: 10px;
}
.button-container {
text-align: left; /* 将按钮靠左对齐 */
margin-bottom: 10px;
}
button {
margin-bottom: 10px;
}
</style>
</head>
<body>
<h1>題目轉換工具</h1>
<textarea id="input" placeholder="貼上excel複製的文字"></textarea>
<div class="button-container">
<button onclick="convert()">轉換</button>
</div>
<textarea id="output" placeholder="輸出結果" readonly></textarea>
<script>
function convert() {
const inputText = document.getElementById('input').value.trim();
const outputElement = document.getElementById('output');
if (!inputText) {
outputElement.value = '請輸入數據。';
return;
}
const lines = inputText.split('\n').map(line => line.trim()).filter(line => line);
let result = '';
for (const line of lines) {
const [title, question, ...optionsAndAnswer] = line.split('\t');
const answerIndex = optionsAndAnswer.pop(); // 正確答案
const options = optionsAndAnswer;
const correctIndices = answerIndex.split('').map(Number);
const numOptions = options.length;
const numCorrect = correctIndices.length;
result += `::${title}::${question} {\n`;
if (numCorrect === 1) {
// 單選題
options.forEach((option, index) => {
if (correctIndices.includes(index + 1)) {
result += ` =${option}\n`;
} else {
result += ` ~${option}\n`;
}
});
} else {
// 多選題
const percentage = numCorrect > 0 ? Math.floor(100 / numCorrect) : 0; // 計算正確答案的百分比
options.forEach((option, index) => {
if (correctIndices.includes(index + 1)) {
result += ` ~%${percentage}%${option}\n`;
} else {
result += ` ~%-100%${option}\n`;
}
});
}
result += '}\n\n';
}
outputElement.value = result.trim();
}
</script>
</body>
</html>