[DAY 16] 随机挑题与写入题目至新页面

上一次讲到的是取得资料范围後再读取里面的内容
可是通常出题应该要随机出题
不然永远只会写到相同的题目
另外本篇也会讲如何自动找题目呈现的分页写入


首先说随机挑题
由於我平时工作主要的语言是 python
所以我一开始在想有没有向python 那样的 random.sample
结果找来找去好像没有QQ
(也有可能是我没找到,如果知道怎麽做的捧油欢迎留言告诉我)

所以我使用的是取随机值排序後取前k个

function randomChoose(total_number, want_number){
  /*
  随机选题,回传被选中的题号
  total_number : 该章节题库的总题数
  want_number  : 该章节要出题的题数
  */

  // 取随机值
  var random_list = [];
  var count = 0;
  while (count<total_number){
    random_list.push(Math.random());
    count = count + 1;
  }
  
  // 将随机值由大到小排列
  sorted = random_list.slice().sort(function(a,b){return b-a});
  
  // 如果是前 k 个就放入要回传的list
  result = [];
  for (var s in random_list){
    if (sorted.indexOf(random_list[s])<want_number){
      result.push(s);
    }
  }
  return result;
}

搞定随机选题後
就可以来看看如何写到新的页面了

如果你想要指定写入的分页
例如我自己有一个「出题呈现」的分页
你就可以用 var show_ques = SpreadSheetApp.getActiveSpreadsheet().getSheetByName(你的分页名称)

在这里要注意的是
因为我的这份google script 是用google spread sheet → 工具 → 指令码编辑器 开启的
所以使用 SpreadSheetApp.getActiveSpreadsheet() 会直接连动到这个google spreadsheet
如果你是在google apps script 开启的专案
需要改为SpreadSheetApp.openById(你的试算表ID)


如果你也跟我一样习惯一个章节用一个分页当作纪录
就可以用getSheetByName 开启那个章节的题库抓题
再利用getSheetByName 把抓到的题目放到你要呈现的分页上

另外在写入时建议使用 getValues 一次写完比较快
有点像是pymysql 中的 executemany
才不容易超过google script 的运行时间限制!!

所以目前题库抓题、出题的基本都会了
然後就可以依照题型往google form 出题了!!
再接下来会讲「回应试算表」的部分
也就是与google form 连动的回应纪录的部分~


<<:  [拯救上班族的 Chrome 扩充套件] 当朋友问我说,为什麽我的页面怎麽开都是猫咪,你有头绪吗? 我 __ __ 怎麽会知道。

>>:  [DAY 06] 盐水爱河 春天小栈

[13th][Day5] 建立一个 daemon container

除了 交互式的 container(interactive container) 也能建立长期运行的...

Day2-台湾菜鸟工程师再度挑战之序之一

现场决定之後那天刚好是10/12 然後正式工作的时间是10/22 在那边之前我需要到其他公司进行教育...

013-状态

到今天最大的困难,好像变成了想主题要写什麽。 来介绍一下做出一个元件後,基本上可以衍伸的思考可能会有...

风险的决策应在投资评估过程中行使

-什麽是风险? 选项B提供了最佳视角,但正确的版本应为“剩余风险低於董事会的风险承受能力。” 基於...

DAY 9:Worker Pool Pattern,就。很。Pool。

什麽是 Worker Pool Pattern? 设定好 pool 的 goroutine 数量,预...