教程:多功能云函数在【试卷类场景】中的应用

楼主
简道云应用场景探索者

距离上一次发【试卷类场景 这次有点儿更彻底】已是一年多一点点了,前些时间对【多功能函数】再次发起了次探索,偶得【多功能云函数在BOM汇总计算中的应用】一文,遂想,要不要将试卷类场景再做一次,毕竟上一次单独建立云函数,是堆了一堆代码。

 

为什么对多功能函数情有独钟,或许是因为它更便于我“懒”吧,毕竟不用再像过去,每当处理一个场景就需要单独再建立一个云函数,现在这样挺好,放在前端,在简道云中拼接好需要处理的命令即可,再者,复用起来是不是也会更为的方便。

 

 

体验链接

https://tnvew1vqtq.jiandaoyun.com/f/62a01da07e76d20007c943e0

 

参考资料

 

帮助文档 — 前端事件

https://hc.jiandaoyun.com/open/12115

快速搞定百度云函数 每月100万次免费调用

https://bbs.fanruan.com/thread-139916-1-1.html

 

 

 

 

核心功能概述

 

如何随机抽题

 

1、命令原型

list(range(1,6))
random.sample(range(1,6),5)

 

2、命令解析

1-5的正序序列 ,1-5的随机序列

 

3、函数命令

dict(zip(['s','r'],[list(range(1,6)),random.sample(range(1,6),5)]))

 

4、返回结果

{
    "release": {
        "s": [
            1,
            2,
            3,
            4,
            5
        ],
        "r": [
            5,
            3,
            4,
            2,
            1
        ]
    },
    "string": "{'s': [1, 2, 3, 4, 5], 'r': [5, 3, 4, 2, 1]}"
}

 

如何随机选项

 

1、命令原型

'   \n'.join([ '. '.join(i) for i in list(zip(list('ABCD'),random.sample([i for i in '浅###硬###软###深###'.split('###')  if i != ''] ,4))) if i !=''])

 

2、命令解析

将提供的选项进行随即排列并在前面自动添加“A.B.C.D.”

 

3、函数命令

'   \n'.join([ '. '.join(i) for i in list(zip(list('ABCD'),random.sample([i for i in '浅###硬###软###深###'.split('###')  if i != ''] ,4))) if i !='']),'   \n'.join([ '. '.join(i) for i in list(zip(list('ABCD'),random.sample([i for i in '黄果树瀑布###壶口瀑布###吊水楼瀑布###三叠泉瀑布###'.split('###')  if i != ''] ,4))) if i !='']),'   \n'.join([ '. '.join(i) for i in list(zip(list('ABC'),random.sample([i for i in '婚否###禁戒###富贵###'.split('###')  if i != ''] ,3))) if i !='']),'   \n'.join([ '. '.join(i) for i in list(zip(list('ABC'),random.sample([i for i in '合欢花###夜来香###夕颜###'.split('###')  if i != ''] ,3))) if i !='']),'   \n'.join([ '. '.join(i) for i in list(zip(list('ABC'),random.sample([i for i in '胎儿期和婴儿期###婴儿期和儿童期###青春期和婴儿期###'.split('###')  if i != ''] ,3))) if i !=''])

 

4、返回结果

{
    "release": [
        "A. 软   \nB. 深   \nC. 浅   \nD. 硬",
        "A. 黄果树瀑布   \nB. 三叠泉瀑布   \nC. 吊水楼瀑布   \nD. 壶口瀑布",
        "A. 富贵   \nB. 禁戒   \nC. 婚否",
        "A. 夕颜   \nB. 合欢花   \nC. 夜来香",
        "A. 青春期和婴儿期   \nB. 胎儿期和婴儿期   \nC. 婴儿期和儿童期"
    ],
    "string": "('A. 软   \\nB. 深   \\nC. 浅   \\nD. 硬', 'A. 黄果树瀑布   \\nB. 三叠泉瀑布   \\nC. 吊水楼瀑布   \\nD. 壶口瀑布', 'A. 富贵   \\nB. 禁戒   \\nC. 婚否', 'A. 夕颜   \\nB. 合欢花   \\nC. 夜来香', 'A. 青春期和婴儿期   \\nB. 胎儿期和婴儿期   \\nC. 婴儿期和儿童期')"
}

 

如何解析答案

 

1、命令原型

'###'.join([ h[3:] for h in [('A. 浅   B. 硬   C. 深   D. 软').split('   ')[k-1] for k in [ord(i)-64 for i in list('D')]]])

 

2、命令解析

跟据已选择的选项将本选项所代表的具体内容解析出来

 

3、函数命令

'&&&'.join(['###'.join([ h[3:] for h in [('A. 浅   B. 硬   C. 深   D. 软').split('   ')[k-1] for k in [ord(i)-64 for i in list('D')]]]),'###'.join([ h[3:] for h in [('A. 壶口瀑布   B. 黄果树瀑布   C. 三叠泉瀑布   D. 吊水楼瀑布').split('   ')[k-1] for k in [ord(i)-64 for i in list('ABD')]]]),'###'.join([ h[3:] for h in [('A. 禁戒   B. 婚否   C. 富贵').split('   ')[k-1] for k in [ord(i)-64 for i in list('A')]]]),'###'.join([ h[3:] for h in [('A. 夕颜   B. 夜来香   C. 合欢花').split('   ')[k-1] for k in [ord(i)-64 for i in list('C')]]]),'###'.join([ h[3:] for h in [('A. 婴儿期和儿童期   B. 胎儿期和婴儿期   C. 青春期和婴儿期').split('   ')[k-1] for k in [ord(i)-64 for i in list('B')]]])])

 

4、返回结果

{
    "release": "软&&&壶口瀑布###黄果树瀑布###吊水楼瀑布&&&禁戒&&&合欢花&&&胎儿期和婴儿期",
    "string": "软&&&壶口瀑布###黄果树瀑布###吊水楼瀑布&&&禁戒&&&合欢花&&&胎儿期和婴儿期"
}

 

如何比对答案

 

1、计算逻辑

(1)  已选择的选项数量与答案的数量一致

(2)  已选择的选项与答案合并去重后与答案的数量一致

 

2、计算公式

IFS(NOT(ISEMPTY(试卷.答题)),IF(AND(NOT(ISEMPTY(试卷.答题解析)),COUNT(试卷.答题)==试卷.答案数量,COUNT(UNION(SPLIT(试卷.原始答案,试卷.答题解析),"###")))==试卷.答案数量),"正确","错误"))

 

温馨提示

 

1、自行搭建或测试中,可以不用管命令的具体含义,拿来拆解下直接用即可,就像吃馒头不一定要非得会种麦子。

2、文中的【函数命令】,说白了就是通过一堆函数的嵌套来实现某个功能,需耐心些、细心些,拼接命令中的固定内容和动态内容。

3、最终通过前端事件前,所有的命令都存在一个【单行文本】中,有些是把子表单中的命令进行了二次拼接,所以看起来可能会很长。

4、测试中,在添加至80道题左右时,云函数不能够正常处理,猜测可能是因为请求类型为get,命令长度超过了限制或返回数据超过了限制,可以用一题一解析的方式处理。

5、特别提示:注意其中的标点符号,也需仅仅只是一个空格,也在起着决定性的作用,上手测吧,从搭建一个【多功能函数】开始。

 

更多内容

 

导航:云函数&前端事件 内容集 

汇总:论坛中发表过的所有帖子

 

更多沟通交流可添加微信(zmlnow)

添加时请备注:简道云

 

 

 

都看到这里了

如果您觉得有用

赞一个呗

赏一个呗

偶会更有动力哈

 

分享扩散:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0回帖数 1关注人数 18248浏览人数
最后回复于:2022-6-27 14:04

返回顶部 返回列表