灵活运用Rend函数,选项随机排序垂手可得 随机题库,简道云模板市场安装即可运用。借助子表单,建立一个随机题库容易,但是要实现题干对应选项随机排序,很多生手百思不得入门,导致认为简道云不能达成这个目标,因而望而生畏。简道云社区也有一篇技术贴,《自建云函数+前端事件》,作者说解决很彻底。但是笔者是代码盲,凡是涉及代码的,动手能力近乎白痴,依葫芦画瓢依然不得其门。再者前端事件需要更强一点的动手能力,也只能膜拜大神和敬畏大神们将简道云运用得出神入画,佩服之至。
闲余下来,笔者仔细细思考,暮然回首,其实,灵活运用Rend函数,增添辅助控件,是很容易达成选项随机排序,从而构建相对理想的随机题库。
首先,复习帮助文档上的两个组合公式:
1、INT(RAND()*(b-a)+a):获取一个大于等于 a 但小于 b 的随机整数 2、SPLIT(text, text_separator)[num]:将文本按指定字符串分割成数组并取出数组中第N个数据。
随即题库构建中,这两个个公式很重要,公式1用于“题干随机序号”和”选项随机”序号生成,公式2用于匹配随机序号的数组取数,都需要多次灵活并深入运用这两个公式。
其次,声明一下,笔者的解决方式依然是借助子表单,因此涉及到子表单随机行数的需求,如果还不会灵活解决的可以在简道云社区拜读一下相关帖子解决,这里不加以赘述。随机题库中题干的随机序号实现,本人也不再重复赘述,简道云模板市场安装后灵活变通既可以轻松实现。
以下为笔者构建的是选项随机排序操作步骤。
第一步:建立一个题库页面,题库的建设建议导入整理好的数据构建,页面大致如下:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps1.jpg 第二步:借助数据工厂对题库进行加工。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps2.jpg 四个输入一致来源“题库”,注意每一个输入取舍对象,比如第一个输入只选A,字段设置1,增添项序1,依次类推字段设置2、3、4为项序2、3、4,数字便于生成的随机数联动对应选项。选项ABCD可忽略,实际用处不大。四个输入源一一对应四个字段设置好題序。最后数据工厂建立的效果如下:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps3.jpgfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps4.jpg 第三步:构建答题页面: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps5.jpg 截图中“题库”运用MAP函数获取最大值,“去重分布数”用于子表单“题干”的联动获取,这里不再介绍,
着重展示下并简洁解释“随机取数”技术目标理论: IFS(ISEMPTY(题库)!=1,UNION(SPLIT(CONCATENATE(INT(RAND()*(5-1)+1),",",INT(RAND()*(5-1)+1),",",INT(RAND()*(5-1)+1),",",INT(RAND()*(5-1)+1)),","),"1","2","3","4",))
1、为什么要用IFS函数? 因为子表单控件需要触发才能显示数据,所以用IFS关联主控件实现触发。
2、为什么要加上1,2,3,4呢? 随机函数是在一个区间内分布均匀随机取数,由于区间太小,重复率较高,且我们需要完全获取ABCD对应的題序,所以1234实际上是一个冗余数据设计,保证題序数虽随机但完整。
3、SPLIT、UNION函数 SPLIT:将文本按指定字符串分割成数组, UNION:去除重复数组(即本文需求的重复数据)
4、INT(RAND()*(5-1)+1) 获取一个大于等于1但小于5的随机整数,可以根据选项个数匹配。
5、UNION(SPLIT(CONCATENATE(INT(RAND()*(5-1)+1),",",INT(RAND()*(5-1)+1),",",INT(RAND()*(5-1)+1),",",INT(RAND()*(5-1)+1)),","),"1","2","3","4",) 通过函数UNION去重后,构建一个1~4随机封闭循环数组合。 可以根据选项个数变化数字“5”为具体选项数+1。实际运用中5-1可以直接赋值为4,不影响结果,但+1表示大于等于1的随机数,如果缺省,从0开始随机取数。
其它,A1、B2、C3、D4运用函数:SPLIT(填空题试卷.选项随机,",")[0] A1值用表达式SPLIT(填空题试卷.选项随机,",")[0]对应取数,其中A1==[0]、B2==[1]、C3==[2]、D4==[3],请对应更换[]内数字。表达式表示将“选项随机”中的数组有序分解到A1、B2、C3、D4. ABCD对应的选项联动“数据工厂-答案”联动对应选项内容,注意对应项序A1、B2、C3、D4. file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps6.jpg
注意:由于选项随机排序,所以最终还需要将答案对应的1234題序转换为正确的答案才能匹配标答。答案转换公式: IF(IF(试卷.答案=="A",试卷.A1,IF(试卷.答案=="B",试卷.B2,IF(试卷.答案=="C",试卷.C3,IF(试卷.答案=="D",试卷.D4," "))))=="1","A",IF(IF(试卷.答案=="A",试卷.A1,IF(试卷.答案=="B",试卷.B2,IF(试卷.答案=="C",试卷.C3,IF(试卷.答案=="D",试卷.D4," "))))=="2","B",IF(IF(试卷.答案=="A",试卷.A1,IF(试卷.答案=="B",试卷.B2,IF(试卷.答案=="C",试卷.C3,IF(试卷.答案=="D",试卷.D4," "))))=="3","C",IF(IF(试卷.答案=="A",试卷.A1,IF(试卷.答案=="B",试卷.B2,IF(试卷.答案=="C",试卷.C3,IF(试卷.答案=="D",试卷.D4," "))))=="1","D"," ")))) 本表达式穷举了选项个数为4的匹配,其它选项个数匹配在此基础上增减。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps7.jpg 最后,联动出标答和答案分值赋分。 得分函数:IF(试卷.转换==试卷.标答,试卷.标准分值,"0") file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps8.jpg
通过取消勾选可见设置,和进一步美化页面,实现最终需要展现的页面。页面中“试题题干”用多行文本稍许加工,用于实现相对美好和标准统一的页面内容。
注意:由于本文是基础指导示范,实际运用中,如果将标答展示在同一页面,PC端通过浏览器修改CSS属性,可以控制页面隐藏属性,从而获得开挂效果,所以,建议将标答用多标签页面集合隐藏并赋分。由于涉及多个转换,这里也不在赘述。(特别鸣谢岑俊杰老师在实际运用中的指导)
最后简洁描述下应用的技术手段和能达到的效果:应用重复利用子表单和随机函数,用于从事先设置好的题库中随机抽取试题,试题选项随机排序,具有自动批改计算分数;主要知识点:1、从题库中获取题目总数量;2、生成随机从1到题库总数的一系列随机数(剔除重复数字);3、按照随机序号排列赋值子表单后从题库中联动试题题干及随机选项;5、利用单选按钮进行作答;6、通过判断用户作答与题库中正确答案序号是否一致来判定分数;7、自定义提交页面,显示分数 还可补充功能:记录错题并提交后展示错题、超时不允许提交、起止时间设置等功能。
通过如上步骤,一个简单实用的选项随机排序随机题库构建完成!
如有叙述不到位,欢迎沟通并指正。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps9.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps10.jpg钉钉==微信:15983762326
编辑于 2021-6-6 18:59
编辑于 2021-6-7 23:53
编辑于 2021-6-8 00:03
编辑于 2021-6-8 00:08
|