灵活运用Rend函数,选项随机排序垂手可得

楼主
我是社区第623546位番薯,欢迎点我头像关注我哦~
灵活运用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函数获取最大值,“去重分布数”用于子表单“题干”的联动获取,这里不再介绍,
可以参阅简道云官方文档随机题库建设:https://hc.jiandaoyun.com/blog/10948

着重展示下并简洁解释“随机取数”技术目标理论:
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  
分享扩散:

来自 11#
发表于 2021-6-6 22:52:27
已实现功能如下:

1、自动按出题数量添加行
2、自动随机打乱抽题顺序
3、自动随机打乱选项顺序
4、前后选项数量保持一致
5、系统自动进行答题批改
https://ub35s32n7x.jiandaoyun.com/f/60b629d10de97c0008605174
沙发
发表于 2021-6-1 17:13:47
建议图片重新上传一下,遇到问题可随时和我联系,感谢分享
板凳
发表于 2021-6-3 12:02:52
地板
发表于 2021-6-3 21:33:49 发布于APP客户端
彭宇我还是没学会啊
5楼
发表于 2021-6-3 21:48:34
请重传图片啊
6楼
发表于 2021-6-6 19:06:04
前面还有张明亮大神的大作,希望大家去拜读和实践下。我的基于简道云子表单范围内特定情景下解决问题,可能并不完整,张明亮大神借助前端事件,速途同归,但他的可能比我的友好和丰富点。
7楼
发表于 2021-6-6 20:18:13
每题选项个数不等的表达式(穷举法列举支持5以内选项个数,可以根据情况):IFS(ISEMPTY(题库)!=1,IF(试卷.选项个数==2,UNION(SPLIT(CONCATENATE(INT(RAND()*2+1),",",INT(RAND()*2+1)),","),"1","2",),IF(试卷.选项个数==3,UNION(SPLIT(CONCATENATE(INT(RAND()*3+1),",",INT(RAND()*3+1),",",INT(RAND()*3+1)),","),"1","2","3",),IF(试卷.选项个数==4,UNION(SPLIT(CONCATENATE(INT(RAND()*4+1),",",INT(RAND()*4+1),",",INT(RAND()*4+1),",",INT(RAND()*4+1)),","),"1","2","3","4",),IF(试卷.选项个数==5,UNION(SPLIT(CONCATENATE(INT(RAND()*5+1),",",INT(RAND()*5+1),",",INT(RAND()*5+1),",",INT(RAND()*5+1),",",INT(RAND()*5+1)),","),"1","2","3","4","5",))))))
体验地址:https://ub35s32n7x.jiandaoyun.com/f/60b629d10de97c0008605174
8楼
发表于 2021-6-6 20:46:53
关于选项数的变化,用穷举法变法函数
9楼
发表于 2021-6-6 22:28:27
10楼
发表于 2021-6-6 22:30:14
1、自动按出题数量添加行
2、自动随机打乱抽题顺序
3、自动随机打乱选项顺序
4、前后选项数量保持一致
5、系统自动进行答题批改
https://ub35s32n7x.jiandaoyun.com/f/60b629d10de97c0008605174
12楼
发表于 2023-10-16 20:55:10
有应用安装链接吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

14回帖数 7关注人数 5635浏览人数
最后回复于:2023-10-16 20:55

返回顶部 返回列表