吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 800|回复: 10
上一主题 下一主题
收起左侧

[Python 原创] 一个刷题小工具

  [复制链接]
跳转到指定楼层
楼主
A-new 发表于 2026-4-14 17:53 回帖奖励
纯人工智能写的一个东西,没有优化只能导入csv题库严格按照
[Asm] 纯文本查看 复制代码
题干,选项A,选项B,选项C,选项D,参考答案,详细解析,
题目1,AAA、BBB,CCC,DDD,A,解析,
题目2,AAA、BBB,CCC,DDD,ABC,解析,
题目3,AAA、BBB,,,A,解析,


单选,多选,判断
题库检测脚本
[Python] 纯文本查看 复制代码
#!/usr/bin/env python3
"""
CSV 题库检测脚本
用法: python check_csv.py <your_file.csv>
"""

import csv
import sys
import io
from pathlib import Path


def check_csv(filepath: str):
    path = Path(filepath)
    if not path.exists():
        print(f"&#10060; 文件不存在: {filepath}")
        sys.exit(1)

    # 读取原始内容,自动处理 BOM
    raw = path.read_bytes()
    content = raw.decode("utf-8-sig")  # utf-8-sig 自动去掉 BOM

    reader = csv.reader(io.StringIO(content))
    rows = list(reader)

    if not rows:
        print("&#10060; 文件为空")
        sys.exit(1)

    header = rows[0]
    print(f"&#128203; 表头: {header}")
    print(f"&#128202; 总行数(含表头): {len(rows)}")
    print(f"&#128202; 数据行数: {len(rows) - 1}")
    print("-" * 60)

    ok_count = 0
    skip_count = 0
    issues = []

    for i, row in enumerate(rows[1:], start=2):  # 从第2行开始(第1行是表头)
        line_issues = []

        # ── 基础检查 ──────────────────────────────────────────
        if len(row) < 6:
            line_issues.append(f"列数不足(只有 {len(row)} 列,至少需要 6 列)")
            issues.append((i, row, line_issues))
            skip_count += 1
            continue

        stem   = row[0].strip()
        opt_a  = row[1].strip() if len(row) > 1 else ""
        opt_b  = row[2].strip() if len(row) > 2 else ""
        opt_c  = row[3].strip() if len(row) > 3 else ""
        opt_d  = row[4].strip() if len(row) > 4 else ""
        answer = row[5].strip().upper() if len(row) > 5 else ""

        # ── 题干检查 ──────────────────────────────────────────
        if not stem:
            line_issues.append("题干为空")

        # ── 选项检查 ──────────────────────────────────────────
        valid_opts = {k: v for k, v in zip("ABCD", [opt_a, opt_b, opt_c, opt_d]) if v}
        if len(valid_opts) < 2:
            line_issues.append(f"有效选项不足2个(A='{opt_a}' B='{opt_b}' C='{opt_c}' D='{opt_d}')")

        # ── 答案检查 ──────────────────────────────────────────
        if not answer:
            line_issues.append("答案为空")
        else:
            invalid_letters = [c for c in answer if c not in valid_opts]
            if invalid_letters:
                line_issues.append(
                    f"答案包含无效选项字母 {invalid_letters}(有效选项: {list(valid_opts.keys())})"
                )

            # 题型推断
            if len(valid_opts) == 2:
                qtype = "判断题"
            elif len(answer) == 1:
                qtype = "单选题"
            else:
                qtype = "多选题"

            # 多选题但答案只有1个字母(可能是数据问题)
            if qtype == "多选题" and len(answer) == 1:
                line_issues.append(f"推断为多选题但答案只有1个字母: '{answer}'")

        # ── 汇总 ──────────────────────────────────────────────
        if line_issues:
            issues.append((i, row, line_issues))
            skip_count += 1
        else:
            ok_count += 1

    # ── 输出结果 ──────────────────────────────────────────────
    print(f"&#9989; 有效题目: {ok_count}")
    print(f"&#10060; 有问题行: {skip_count}")
    print()

    if not issues:
        print("&#127881; 所有题目格式正确!")
        return

    print(f"{'行号':<6} {'问题描述':<50} {'题干预览'}")
    print("-" * 100)
    for line_no, row, errs in issues:
        stem_preview = (row[0][:30] + "...") if len(row[0]) > 30 else row[0]
        stem_preview = stem_preview.replace("\n", "\\n")
        for j, err in enumerate(errs):
            if j == 0:
                print(f"{line_no:<6} {err:<50} {stem_preview}")
            else:
                print(f"{'':6} {err}")
        print()

    # ── 导出问题行到文件 ──────────────────────────────────────
    out_path = path.with_name(path.stem + "_issues.txt")
    with open(out_path, "w", encoding="utf-8") as f:
        f.write(f"文件: {filepath}\n")
        f.write(f"总数据行: {len(rows)-1},有效: {ok_count},有问题: {skip_count}\n\n")
        for line_no, row, errs in issues:
            f.write(f"第 {line_no} 行:\n")
            f.write(f"  原始内容: {row}\n")
            for err in errs:
                f.write(f"  &#9888; {err}\n")
            f.write("\n")
    print(f"&#128196; 详细报告已保存到: {out_path}")


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("用法: python check_csv.py <your_file.csv>")
        sys.exit(1)
    check_csv(sys.argv[1])

还有很大改进空间,目前只是能用

下载 https://a-new.lanzouu.com/b03cazu1ud密码:ak6v

免费评分

参与人数 6吾爱币 +11 热心值 +5 收起 理由
AUV99 + 1 + 1 我很赞同!
shengruqing + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
bg_yx + 1 我很赞同!
xiangzz + 1 + 1 鼓励转贴优秀软件安全工具和文档!
Quan1976 + 1 + 1 用心讨论,共获提升!

查看全部评分

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

沙发
linglong2013 发表于 2026-4-14 18:03
苹果手机如何使用?
3#
qiqigirl 发表于 2026-4-14 18:44
4#
Quan1976 发表于 2026-4-14 19:24
5#
xiangzz 发表于 2026-4-14 19:29
本帖最后由 xiangzz 于 2026-4-14 19:31 编辑

确实是 小工具,有点不太合理
多选题 一般是5个
问卷星、刷题神器等都有不好的地方。现在企业很多道一云的  体验感极差
6#
AiGuoZhe66 发表于 2026-4-14 19:35
这个AI做的比这个好啊,完全可以用AI的啊
7#
moabc1860 发表于 2026-4-14 19:42
感谢分享  现在好像不需要这种了
8#
li000yu 发表于 2026-4-14 21:28
只能手机上用么
9#
cux666 发表于 2026-4-14 21:38
人工很辛苦,工具还不错
10#
YMXuan 发表于 2026-4-14 22:33
直接用anki做抽卡也挺合适,和AI说清楚想要什么效果,都能够写出能用的模板。刚让豆包给写了anki选择题模板,再加上题库的题格式够标准,很快就批量搞好了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-4-15 04:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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