Как мне просмотреть варианты вопросов, чтобы я мог назначить правильный выбор, а другие - неправильный? - PullRequest
0 голосов
/ 23 сентября 2018

Я хотел бы создать электронную таблицу, в которой я могу указать ответы на заданный вопрос.

Я бы хотел настроить свою викторину так, чтобы у меня не было жесткого кода, ответы на который верныи которые неверны.На данный момент все, что делает этот код, - это хранить вопросы и варианты в переменной и записывать их в форму Google.В настоящее время нет функциональности, чтобы проверить, является ли ответ, выбранный пользователем, правильным.Я думаю, что ниже приведена часть кода.В настоящий момент он берет вопрос и варианты из электронной таблицы, хранящиеся в переменной, и записывает вопрос и возможные варианты в форму 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)

1 Ответ

0 голосов
/ 24 сентября 2018

Поток сценариев:

  • Получить все данные из электронной таблицы
  • Получить каждую строку таблицы data
  • Добавить вопросы из Col3 data[2]
  • Добавить все ответы от Col4 к последнему столбцу 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()

Ссылки:

...