如何遍历问题选项,以便我可以将一个选项指定为正确选项,将其他选项指定为错误选项?

How do I loop through question options so that I can assign a choice as correct and others as incorrect?

我想创建一个电子表格,我可以在其中指定给定问题的答案。

我想设置我的测验,这样我就不必硬编码哪些答案是正确的,哪些是错误的。目前,这段代码所做的只是将问题和选项存储在变量中,并将它们写入 google 形式。目前没有检查用户 select 的答案是否正确的功能。我认为以下是有问题的代码部分。目前,它从电子表格中获取问题和选项,存储在一个变量中,并将问题和可能的选项写入 google 形式。我将如何遍历选项并将每个选项与另一个名为 answer 的变量进行比较?如果相同(选项 == 答案),则指定该特定选项为答案,其余选项为否。

我知道我需要将表格设置为测验。

 //Add questions and options to form  
      for (qq=0;qq<numOfQs-1;qq++){
        var formQ = form.addMultipleChoiceItem();
        formQ.setTitle(questions[0][qq]);
        formQ.setChoiceValues(allOptions[qq]);

如果这有帮助,下面是我复制的完整代码。

function createFormFromData() {
      var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  
  //Get data, number of questions and options info
  var data = sh.getDataRange().getValues();
  var numOfOptions = data.length-3;
  var numOfQs = data[0].length;

  //Get questions
  var questions = sh.getRange(2, 2, 1, numOfQs).getValues();

  //Get options and store in an array
  var allOptions = [];
  for (q=2;q<=numOfQs;q++){
    var options = sh.getRange(3, q, numOfOptions, 1).getValues();
    allOptions.push(options);
  }

  //Create the form
  var form = FormApp.create("New form");
  
  //Add questions and options to form  
  for (qq=0;qq<numOfQs-1;qq++){
    var formQ = 

提前感谢您的帮助。

更新#1

所以我一直在努力解决这个问题。我想我可以尝试结合使用 for 循环和 if 语句。

function makeMultipleQ(data) {
  var question = data [2]
  var questionNumber = data [0]
  var answer = data[9]
  Logger.log(answer)
  var item = form.addMultipleChoiceItem()
  item.setTitle(questionNumber + '. ' + question)
  
  var trimmedData = data.filter(function(str) {
    return /\S/.test(str)
  })
  var slicedData = trimmedData.slice(3,trimmedData.length-1)
  var options = []
  for (var i = 0; i<slicedData.length;i++) {
    Logger.log(i)
    if (slicedData[i] == answer) {
      Logger.log('Yes')
      Logger.log(slicedData[i])
      options.push(item.createChoice(slicedData[i], true))
    }
    else {
      Logger.log('No')
    }
    }

我更改了电子表格的布局以适应 Google 表格中不同类型的问题。如果循环中存在,此时的 if 语句在答案的索引处说是;但是,如果发生这种情况,我似乎无法将答案设置为正确答案。同样,如果数组中没有答案,则认为它不正确。

任何帮助将不胜感激。

谢谢!!这就是我的电子表格现在的样子。 (https://i.stack.imgur.com/xhFSN.jpg)

脚本流程:

  • 从电子表格中获取所有数据
  • 获取电子表格的每一行data
  • 添加第 3 栏的问题 data[2]
  • 将第 4 列的所有答案添加到最后一列 slicedData
  • 使用 createChoice(value,isCorrect)
  • 创建选项数组
  • setChoice() 选择数组。

修改后的脚本:

function makeMultipleQ(data) { //data- a row of spreadsheet dataRange
  var question = data[2]
  var questionNumber = data[0]
  var answer = data[9]
  Logger.log(answer)
  var item = form.addMultipleChoiceItem(); //form to add choice
  item.setTitle(questionNumber + '. ' + question)
  var trimmedData = data.filter(function(str) {
    return /\S/.test(str)
  })
  var slicedData = trimmedData.slice(3, trimmedData.length - 1)
  var choices = []; //array of choices
  for (var i = 0; i < slicedData.length; i++) {
    Logger.log(i)
    if (slicedData[i] == answer) {
      Logger.log('Yes')
      Logger.log(slicedData[i])
      choices.push(item.createChoice(slicedData[i], true));//correct answer pushed to choices
    }
    else {
      Logger.log('No');
      choices.push(item.createChoice(slicedData[i],false)); //wrong answer pushed to choices
    }
  }
  item.setChoices(choices); //set the choices array to this itemQ
}

备注:

  • 如果答案总是在 Col10 data[9],则不需要循环。如果表格尚未完成随机化,您可能想将其随机化。
  • 如果您以编程方式创建表单,您还需要通过 setIsQuiz()
  • 启用测验模式

参考文献: