吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5225|回复: 97
收起左侧

[学习记录] 题库练习,本地html

    [复制链接]
lostlosin 发表于 2025-12-16 13:44
本帖最后由 lostlosin 于 2025-12-18 08:22 编辑

借助AI做了一个简单的本地html题库练习,简单易用,就不做多介绍了,因为手头上判断题渠道不同,设置了支持多种类型,具体如图。

题库格式:导出模板,按模板填写
题干,答案,选项A,选项B,选项C,选项D,选项E,选项F,选项G,选项H,解析,类型
题干和答案为必填项
类型(单选题、多选题、判断题、填空题)如未填写,导入自动识别。


蓝奏云https://wwazg.lanzoub.com/iPsgq3dugy7e

更新
1.1,仅未做题和错题逻辑bug已修复,优化错题集

Quicker_20251216_132635.png

3337_121351.png

333.jpg

[JavaScript] 纯文本查看 复制代码
// 自动判断题目类型
function determineQuestionType(row) {
    // 如果原来就有类型列且不为空,优先使用原有类型
    if (row.类型 && row.类型.trim() !== '') {
        return row.类型;
    }
    
    const questionStem = row.题干 || '';
    // 确保答案是字符串
    const answer = String(row.答案);
    
    // 规则1:当答案为对、错、正确、错误、TRUE、FALSE时,且其他答案选项内容为空,为判断题
    // 处理Excel中可能的不同导入格式:字符串'TRUE'/'FALSE'、数字1/0、布尔值true/false
    const isTrueAnswer = (answer === '对' || answer === '正确' || answer === 'TRUE' || answer === '1' || answer === 'true');
    const isFalseAnswer = (answer === '错' || answer === '错误' || answer === 'FALSE' || answer === '0' || answer === 'false');
    
    if ((isTrueAnswer || isFalseAnswer) && !hasAnyOptionContent(row)) {
        return '判断题';
    }
    
    // 新增规则:检查题干中是否包含填空题特征(括号或下划线)
    // 检查是否有括号(中文或英文),且括号中间为空或只有空格
    const hasChineseBracketWithSpaces = /[((]\s*[))]/g.test(questionStem);
    // 检查是否有独立的下划线(前后有空格或在句首/句尾)
    const hasStandaloneUnderscore = /(\s|^)_+(\s|$)/g.test(questionStem);
    
    // 如果题干中有括号(中间为空或只有空格)或独立的下划线,且选项都为空,则为填空题
    if ((hasChineseBracketWithSpaces || hasStandaloneUnderscore) && !hasAnyOptionContent(row)) {
        return '填空题';
    }
    
    // 获取选项内容
    const optionA = (row['选项A'] || '').trim();
    const optionB = (row['选项B'] || '').trim();
    
    // 规则2:当答案为单个字母,且只存在选项A和选项B
    if (/^[A-Z]$/.test(answer) && optionA && optionB && !hasMoreThanTwoOptions(row)) {
        // 检查是否满足判断题的条件
        if ((optionA === '对' && optionB === '错') ||
            (optionA === '正确' && optionB === '错误') ||
            (optionA === 'TRUE' && optionB === 'FALSE') ||
            (optionA === 'FALSE' && optionB === 'TRUE') ||
            (optionA === '错' && optionB === '对') ||
            (optionA === '错误' && optionB === '正确') ||
            (optionA === '1' && optionB === '0') ||
            (optionA === '0' && optionB === '1') ||
            (optionA === 'true' && optionB === 'false') ||
            (optionA === 'false' && optionB === 'true')) {
            return '判断题';
        }
        
        // 规则3:当答案为单个字母,且至少存在两个选项答案,且至少一个选项不为对、错、正确、错误时,为单选题
        if (!isJudgmentOption(optionA) || !isJudgmentOption(optionB)) {
            return '单选题';
        } else {
            // 如果两个选项都是判断题选项,则为判断题
            return '判断题';
        }
    }
    
    // 规则4:当答案为至少两个字母,且至少存在两个选项答案时,为多选题
    if (/^[A-Z]+$/.test(answer) && answer.length >= 2 && hasAtLeastTwoOptions(row)) {
        return '多选题';
    }
    
    // 规则5:当答案为单个字母,且至少存在两个选项答案时,为单选题
    if (/^[A-Z]$/.test(answer) && hasAtLeastTwoOptions(row)) {
        return '单选题';
    }
    
    // 默认为填空题
    return '填空题';
}

// 检查是否有任何选项内容
function hasAnyOptionContent(row) {
    const optionLabels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'];
    for (let i = 0; i < optionLabels.length; i++) {
        // 确保选项值是字符串
        const optionValue = String(row[`选项${optionLabels[i]}`]);
        if (optionValue && optionValue.trim() !== '') {
            return true;
        }
    }
    return false;
}

// 检查是否有超过两个选项
function hasMoreThanTwoOptions(row) {
    const optionLabels = ['C', 'D', 'E', 'F', 'G', 'H'];
    for (let i = 0; i < optionLabels.length; i++) {
        // 确保选项值是字符串
        const optionValue = String(row[`选项${optionLabels[i]}`]);
        if (optionValue && optionValue.trim() !== '') {
            return true;
        }
    }
    return false;
}

// 检查是否为判断题选项
function isJudgmentOption(option) {
    // 确保选项是字符串并去除首尾空格后进行比较
    const trimmedOption = String(option).trim();
    return trimmedOption === '对' || trimmedOption === '错' || trimmedOption === 'TRUE' || trimmedOption === 'FALSE' || trimmedOption === '正确' || trimmedOption === '错误' ||
           trimmedOption === '1' || trimmedOption === '0' || trimmedOption === 'true' || trimmedOption === 'false';
}

// 检查是否有至少两个选项
function hasAtLeastTwoOptions(row) {
    // 确保选项值是字符串
    const optionA = String(row['选项A']) || '';
    const optionB = String(row['选项B']) || '';
    return optionA.trim() !== '' && optionB.trim() !== '';
}

免费评分

参与人数 23吾爱币 +19 热心值 +22 收起 理由
the_black + 1 + 1 谢谢@Thanks!
夹克油 + 1 + 1 再加个打印按钮是不是更好?
udbadwv + 1 + 1 我很赞同!
DJCZZRQSGLZS + 1 我很赞同!
陪你到以后、 + 1 + 1 谢谢@Thanks!
diliuyue + 1 谢谢@Thanks!
yuppy34 + 1 + 1 谢谢@Thanks!
iSummerice + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
mockmoon + 1 + 1 我很赞同!
hbiui + 1 热心回复!
ruciduojiao + 1 + 1 我很赞同!
cwwloveyu + 1 + 1 我很赞同!
wapj2900958 + 1 + 1 谢谢@Thanks!
wode4826 + 1 谢谢@Thanks!
fofawb + 1 + 1 用心讨论,共获提升!
xuhao4577062311 + 1 + 1 我很赞同!
mywlbc + 1 + 1 我很赞同!请求更新,题目可以加图片上去
bno357 + 1 + 1 我很赞同!
wuloveyou + 1 我很赞同!
PayB + 1 + 1 谢谢@Thanks!
xlln + 1 + 1 我很赞同!
helh0275 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
海洋之心专用 + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ydafu168 发表于 2025-12-16 13:55
优秀,学习了,
Ming2001 发表于 2025-12-16 13:59
lgwc36 发表于 2025-12-16 14:09
cprahdt 发表于 2025-12-16 14:10
感谢楼主分享
yinghao2005 发表于 2025-12-16 14:28
厉害感谢分享学习了
chn43963 发表于 2025-12-16 14:32
感谢分享,学习了,优秀
zhufuan 发表于 2025-12-16 14:35
老师,是什么题库格式,我上传了就是错误
Scan 发表于 2025-12-16 14:35
感谢分享,我想集成到我的题库里
暗无天日 发表于 2025-12-16 14:38
如果有题库会更优秀
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-7-14 08:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表