结对项目:小学四则运算题目生成器

news/2025/10/20 21:15:52/文章来源:https://www.cnblogs.com/sevanthea7/p/19153666

结对项目:小学四则运算题目生成器

这个项目属于哪个课程 课程链接
作业要求 作业链接
作业的目标 结对编程实现一个自动生成小学四则运算题目的命令行程序
学号姓名 3223004816王韵清,3223004820曾钰仪
Github链接 Github链接

1. PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 20
Estimate · 估计这个任务需要多少时间 20 20
Development 开发 350 400
Analysis · 需求分析 (包括学习新技术) 30 50
Design Spec · 生成设计文档 20 20
Design Review · 设计复审 20 10
Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 10
Design · 具体设计 40 60
Coding · 具体编码 150 180
Code Review · 代码复审 20 10
Test · 测试(自我测试,修改代码,提交修改) 60 60
Reporting 报告 85 105
Test Report · 测试报告 70 90
Size Measurement · 计算工作量 5 5
Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 10 10
合计 455 525

2. 需求解析

本实验的目标是设计并实现一个自动生成小学四则运算题目的程序,要求能够根据用户输入的参数生成指定数量和范围的算术题,并支持对题目答案进行自动批改与统计。程序可采用命令行或图形界面形式实现。

(1)生成

  • 每道题中运算符数量不超过3个
  • 中间计算过程不能出现负数
  • 除法运算结果必须是真分数,不能为假分数或无限小数
  • 生成的题目结果需在规定范围内
  • 生成的题目必须互不重复。若通过交换加法或乘法的左右操作数可互相变换,则视为重复。
  • e =,程序生成的题目以等号结尾,其中 e 为表达式

(2)判卷

  • 比较用户提交的答案与程序计算的题目,统计正确与错误的题目编号,结果输出到 Grade.txt 文件

(3)其他要求

  • 程序需支持一次性生成多达 10000 道题目
  • 能稳定运行,保证输出文件格式规范,分数表示正确(如 2’3/5 表示 2 又五分之三)。
  • 可选图形界面版本,支持输入参数和文件路径的交互操作。

3. 算法流程及实现

(1)生成流程

当调用 generate_exercises(n, r) 时,程序首先通过 make_unique_expressions 反复调用 generate_expr(max_ops, r) 随机构造四则运算表达式树。其中,叶节点由 generate_number 随机生成自然数、真分数或带分数。对每个表达式,程序调用 Expr.value() 计算其精确值(以 Fraction 类型存储),随后通过 write_exercises_and_answers 将用户可读的题目字符串(由 Expr.to_display() 生成,并使用 strip_outer_paren 去除最外层括号)写入Exercises.txt文件,同时将格式化后的标准答案字符串(经 format_fraction_output 处理)写入Answers.txt。生成过程中使用 Expr.canonical() 对表达式进行规范化以检测重复,并确保算式合法(避免除零、保证减法不出现负数等)。

(2)判卷流程

当调用 grading(exercise_file, answer_file) 时,程序逐行读取题目与输入答案。对于每道题目,先使用正则表达式将可能出现的带分数形式转换为可计算格式,并将题目字符串分割为数字、运算符与括号的序列token。然后将每个数字标记解析为 Fraction 表达式,利用受限环境下的 eval(仅允许 Fraction)计算标准答案 val。输入答案则通过 parse_number_token 函数解析为对应的 Fraction 对象。程序逐题比较两者是否相等,并记录正确与错误的题号。最终统计结果输出至Grade.txt文件

(3)项目特色

i. 四则运算表达式树

在表达式构建与求值部分的设计中,最大的特色在于采用了递归式表达式树结构,通过 Expr 类实现了四则运算表达式的自然建模与计算。

  1. 递归定义表达式结构
    • Expr 类将每个算式都视为一棵二叉树,其中叶节点是数字节点(kind == 'num'),内部节点是运算符节点(+, -, *, /
    • 每个节点自身又可能包含子表达式,因此能递归地构建任意深度、任意复杂度的四则运算式。
    • 这种树形结构使得运算顺序、括号规则和去重逻辑都能自然表达,无需依赖字符串拼接或复杂的解析器
  2. 递归求值逻辑
    • 若为数字节点,则直接返回 Fraction
    • 若为运算符节点,则先递归求左右子树的值,再根据当前运算符进行计算
    • 这种自顶向下的递归求解过程对应数学中的表达式求值过程,同时利用Fraction对象保证了结果的精确性
  3. 递归生成表达式字符串
    • to_string() 递归地为每个运算加上括号,保证存储和计算时的运算优先级正确
    • to_display() 则通过递归判断是否需要括号,生成人类更易读的格式
    • 兼顾机器可读与人类可读的双层输出逻辑
  4. 递归规范化去重
    • 对于可交换运算符(+*),递归地取子表达式的规范字符串并按字典序排序,实现去重功能

ii. 判卷逻辑

  1. 高精度计算
    • 使用 Python 的 Fraction 对象表示整数、真分数和带分数,保证计算过程中不会出现浮点误差
    • 将输入答案和标准答案都转换为 Fraction 后再进行比较,实现严格的精确判分
  2. 灵活的表达式解析
    • 对题目字符串使用正则处理带分数(如 2'3/8(2 + 3/8)),自动解决优先级问题。
    • 使用正则将表达式拆解为数字、运算符、括号等 token,再组合成可用 eval 执行的安全表达式
    • 兼容整数、真分数、带分数等多种输入格式
  3. 递归式判分与容错
    • 每题独立判分,遇到无法计算或解析的题目自动标记为错误,而不会影响其他题目
    • 自动处理答案文件比题目文件短的情况,剩余题目视为错误,保证统计完整
  4. 详细统计与报告输出
    • 输出文件 Grade.txt 包含正确题目数量及编号、错误题目数量及编号

4. 模块接口

calculator 项目采用面向对象与函数式相结合的设计思路。核心由2个类和6个功能模块组成:

  • 核心类(2个) 位于 basic_class.py
    • Number 类封装了 Python 的 Fraction 类型,用于精确表示分数并支持格式化输出
    • Expr 类用于构建和操作四则运算表达式树,提供计算(value())、输出(to_display()to_string())及去重判断(canonical())方法
  • 功能模块(6个) 位于 functions/ 目录下,分别负责生成、格式化、判卷、工具、文件写入等任务:
    • generate_func.py 负责随机生成数字与表达式
    • write_func.py 负责将题目和答案写入文件
    • grade_func.py 实现判卷逻辑
    • format_func.py 处理分数格式转换
    • tool_func.py 提供辅助函数如表达式去重和分数解析
    • call_func.py 作为功能调度中心,供命令行或GUI调用

此外,main.py 提供命令行入口,gui.py 启动图形化界面,static/index.html 定义前端界面布局。

calculator/
│
├─ main.py
│   └─ main()                 # 主入口,解析命令行参数,启动题目生成或判卷功能
│
├─ gui.py                     # 启动图形界面
│
├─ basic_class.py
│   ├─ Number                 # 数值类,内部以Fraction存储精确分数,封装 format_fraction_output 便于输出
│   └─ Expr                   # 四则运算表达式类,可递归构建表达式树
│       ├─ value()            # 递归计算表达式的Fraction值
│       ├─ to_string()        # 返回严格括号化的表达式字符串,用于存储或结构比较
│       ├─ to_display()       # 返回用户可读的题目字符串
│       └─ canonical()        # 生成表达式的规范化形式,用于判断重复题
│
├─ functions
│   ├─ call_func.py
│   │   ├─ generate_exercises()   # 调用make_unique_expressions与write_exercises_and_answers实现题目与答案生成
│   │   └─ check_answers()        # 调用grading函数进行答案判卷
│   │
│   ├─ format_func.py
│   │   ├─ format_fraction_output()   # 将Fraction格式化为输出友好的字符串
│   │   └─ format_fraction_calculate()# 将Fraction转换为可参与eval计算的字符串
│   │
│   ├─ generate_func.py
│   │   ├─ generate_number()          # 随机生成单个自然数或真分数
│   │   └─ generate_expr()            # 生成满足约束的表达式树
│   │
│   ├─ grade_func.py
│   │   └─ grading()                  # 比对题目与答案文件,判定正误并生成成绩报告
│   │
│   ├─ tool_func.py
│   │   ├─ parse_number_token()       # 将数字字符串解析为Fraction对象
│   │   └─ make_unique_expressions()  # 调用generate_expr生成表达式并去重
│   │
│   └─ write_func.py
│       ├─ write_exercises_and_answers()   # 写出题目与答案文件,调用strip_outer_paren去除最外层括号
│       └─ strip_outer_paren()             # 去除字符串最外层的一对括号
│
└─ static└─ index.html                # 图形界面html布局文件

5. 代码分析

程序的关键功能为生成题目、答案与评判答案对错,代码分析将基于这两个部分进行说明:

(1)生成部分

  1. make_unique_expressions():
  • 核心思路:通过循环生成表达式,生成指定数量(count)的不重复数学表达式,且表达式需满足操作符数量上限(max_ops)和数值范围(r_bound)约束,并验证有效性并去重,最终返回符合条件的结果列表。
  • 关键代码:
def make_unique_expressions(count, max_ops, r_bound):"""生成不重复的表达式对象列表。输入:count   : 期望生成的不重复表达式数量max_ops : 最大操作符数量r_bound : 数值范围,数的上下界"""seen = set()  # 记录已出现表达式的字符串,避免重复res = []      # 最终返回的表达式对象列表attempts = 0  # 计数器,记录已尝试生成的数量,防止死循环while len(res) < count:if attempts > count * 200:raise RuntimeError("无法在合理尝试次数内生成足够不重复满足约束的题目,请尝试放宽参数(增大范围或减少数量)。")attempts += 1# 从外部生成器获取一个表达式对象expr = generate_expr(max_ops, r_bound)try:_ = expr.value()    # 表达式可计算except Exception:continuecan = expr.canonical()  # 表达式的规范化字符串,用于判重if can in seen:continue    # 如果已经生成过相同的题目,则跳过# 表达式通过检查,加入集合与结果列表seen.add(can)res.append(expr)return res
  1. generate_expr():
  • 核心思路:采用递归构建表达式树,通过nodes列表存储中间节点,随机选择运算符和操作数组合,逐步合并生成符合约束的四则运算表达式。
  • 关键代码:
def generate_expr(max_ops, r_bound):"""随机生成一个满足约束的四则运算表达式输入:max_ops:最大运算符数量r_bound:结果上界约束递归构造表达式树流程:1. 每次从nodes中取两个节点组合成一个新的Expr(op, left, right)2. 插回nodes,直到只剩一个根节点"""ops = random.randint(1, max_ops)    # 随机确定运算符数量(1~max_ops之间)nodes = [Expr('num', num=generate_number(r_bound)) for _ in range(ops + 1)] # 初始化操作数节点,数量为运算符数+1operators = [random.choice(['+','-','*','/']) for _ in range(ops)]  # 随机生成运算符序列while operators:op = operators.pop(0)                               # 从头取一个运算符idx = random.randint(0, max(0, len(nodes)-2))       # 随机取两个相邻节点索引a = nodes.pop(idx)b = nodes.pop(idx)tries = 0success = Falsewhile tries < 50 and not success:   # 尝试生成合法组合,避免非法除法或负数结果tries += 1va = a.value()vb = b.value()if op == '-':   # 减法时,保证结果非负if va < vb:a, b = b, asuccess = Trueelif op == '/': # 除法时,避免除以0if vb != 0:success = Trueelse:b = Expr('num', num=generate_number(r_bound))else:success = True  # 加法或乘法总是合法if not success:     # 若多次尝试仍不成功,回退到加法op = '+'nodes.insert(idx, Expr(op, left=a, right=b))    # 将合成的新表达式插回 nodes 列表expr = nodes[0]     # 所有节点合并完毕,剩余一个根节点# val = expr.value()# # 如果要求结果也在r_bound内# if val < 0 or val > r_bound:#     return generate_expr(max_ops, r_bound)return expr

(2)判卷部分

grading():

  • 核心思路:读取题目和答案文件,预处理表达式,通过 eval 计算题目结果,比较题目结果与用户答案,记录正确 / 错误题号,最后将统计结果写入评分文件。
  • 关键代码:
def grading(exercise_file, answer_file, out_file='Grade.txt'):"""判分函数:比较题目文件和答案文件中每一题的结果是否正确,并输出成绩报告流程:1. 逐行读取题目和答案2. 对每道题进行解析与计算3. 对比计算结果与答案4. 统计正确和错误题号5. 将结果写入Grade.txt"""# 读取题目和答案文件with open(exercise_file, 'r', encoding='utf-8') as fe:ex_lines = [ln.strip() for ln in fe.readlines() if ln.strip() != '']with open(answer_file, 'r', encoding='utf-8') as fa:an_lines = [ln.strip() for ln in fa.readlines() if ln.strip() != '']# 取两文件的最小行数,避免越界n = min(len(ex_lines), len(an_lines))# 存放正确与错误题号(从1开始计数)correct_idx = []wrong_idx = []# 逐题判分for i in range(n):ex_line = ex_lines[i]ex_expr_str = ex_lineif ex_expr_str.endswith('='):ex_expr_str = ex_expr_str[:-1].strip()# 对带分数进行转换safe = re.sub(r"(\d+)'(\d+/\d+)", r"(\1 + \2)", ex_expr_str)    # 需要在两边补上括号,不然会出现优先级的问题# 使用正则表达式提取出表达式中的所有合法的数字、运算符、括号,视为tokentoks = re.findall(r"(\d+'?\d*\/?\d*|\d+|[()+\-*/])", safe)expr_clean= []for tok in toks:if re.match(r"^\d+'", tok) or re.match(r"^\d+/\d+$", tok) or re.match(r"^\d+$", tok):# 若为带分数(理论上在上一步已替换掉,这里仅作保险处理)if "'" in tok:expr_clean.append(tok)# 若为真分数elif '/' in tok:a, b = tok.split('/')expr_clean.append(f"Fraction({int(a)},{int(b)})")# 若为整数else:expr_clean.append(f"Fraction({int(tok)},1)")else:# 若为运算符或括号,直接保留expr_clean.append(tok)# 将整理好的式子拼接成eval函数可执行的合法表达式字符串expr_str = ' '.join(expr_clean)# 计算阶段try:# 使用eval执行计算,限制全局环境,仅允许 Fractionval = eval(expr_str, {"Fraction": Fraction})except Exception:# 无法计算则判为错误题print(f'第 {i+1} 行题目无法计算!')wrong_idx.append(i + 1)continue# 答案解析try:# 将答案字符串解析为Fraction对象,用于比较ans_frac = parse_number_token(an_lines[i])except Exception:# 若答案无法解析,视为错误wrong_idx.append(i + 1)continue# 判分if val == ans_frac:correct_idx.append(i + 1)else:wrong_idx.append(i + 1)# 若答案文件少于题目文件,剩下的题目自动视为错误if len(an_lines) < len(ex_lines):for j in range(len(an_lines), len(ex_lines)):wrong_idx.append(j + 1)# 输出结果到文件with open(out_file, 'w', encoding='utf-8') as fo:fo.write(f"Correct: {len(correct_idx)} ({', '.join(map(str, correct_idx))})\n\n")fo.write(f"Wrong: {len(wrong_idx)} ({', '.join(map(str, wrong_idx))})\n")print(f"成绩计算完成!结果已输出到 {out_file}。")

6. 效能分析

(1)生成题目

i. 优化前

通过cProfile计算效能并输出为prof文件后,用pstats读取并进行可视化,我们得到:

11a92ac76f696e059f80738ba8807559

  • generate_expr()make_unique_expressions() 占总耗时约 60%以上。
    这是由于题目生成涉及递归树结构构造与随机数生成,属于典型的计算密集型过程

ii. 优化后

分析函数组成,对函数进行如下结构优化:

generate_expr()

  • 移除操作数获取的循环调用,改为直接生成非零除数;
  • 简化减法逻辑,结果为负直接交换操作数;
  • 限制除法结果为整数(或有限小数),减少后续因结果不合法导致的丢弃。

make_unique_expressions()

  • 提前过滤结果超出结果上界的表达式,减少无效判重;
  • 减少最大尝试次数,并通过优化生成逻辑提高单次生成有效性。
  • 优化判重,使用哈希值而非完整字符串;

并得到效能分析结果:

image

可以看出,generate_exercises()generate_expr()make_unique_expressions()的累计耗时均有所下降。

(2)判卷

i. 优化前

image

  • 性能瓶颈集中在 grading() 函数,因为它需要反复进行正则解析、字符串转换与 Fraction 运算。
  • check_answers() 本身几乎不耗时,只是中转调用,所以性能优化应直接针对 grading() 进行。

ii. 优化后

主要优化点说明:

  • 将频繁使用的正则表达式预编译为全局对象,避免每次循环都重新编译;
  • 使用生成器表达式替代列表 append 构建表达式,减少字符串操作;
  • 预定义 Fraction 类引用,减少属性查找开销

优化后效能分析结果如下:

7. 测试运行

(1)命令行测试

i. 生成题目

  • 正常输入

    8d5ebb88105bf86f7cd29ef8e748aec3
    9647d938c69fb0af3c69c9ef80221096
    a0442a6371a02cff214fc5231ee38fa3

  • 生成10000道题目

    c8adf8f1d115d0b2faf9ac1516c44cbf
    aa1644816a99d882e4c1e3a39bbe32ae
    000e6a45b0a35abb8adaa69de0bec007

  • 缺少内容

    5376a58372ab0ff8de789ef01e4cd109

  • 输入不合要求的内容

    411dc4b7365dc31f79ef832d112d5a64

    e14d75ed99189a559a4e5c7f6aa5f18c

ii. 判卷

  • 正常输入

    69b6b003ea43a57ff41acc78fc1b8e0a

  • 输入乱码

    ac62f5fb9a4636dbb61c26dcf9ed7ccc
    efeb9d7c08a5cf5d637721ebbcbaf657

  • 路径不存在

    cf73a7e3545c19d00674ec65c660de54
    b1fcf5237b2f50f13a33aff552d11d23

  • 内容不完整

    fed2e797c309afdb4f7f0966c9f771bc

  • 输出的题目与答案直接判卷(全部正确)

  • 修改输出答案中的1、2题答案判卷(1、2题错误)

注:命令行测试与图形化界面测试内容几乎相同,输出文件内容仅在本节展示,图形化测试小节不再展示输出

(2)图形化界面测试

i. 生成题目

  • 正常输入

  • 缺少内容

  • 输入不合要求的内容

ii. 判卷

  • 正常输入

  • 输入乱码

  • 路径不存在

  • 内容不完整

8. 项目小结

本项目实现了一个兼具命令行和用户界面操作的生成四则运算的程序,并支持答案评判。具体功能如下:

  • 自动生成指定数量与范围的四则运算题目,并确保符合计格式要求,且生成题目不重复
  • 同时生成题目对应的答案
  • 将题目与答案分别写入 Exercises 和 Answer 文件
  • 可对比题目与答案进行答案正误评判,并生成报告

项目经验分享:

  • 对于目标功能复杂的项目,需要拆分功能到不同模块,并确保各模块逻辑层次分明,互相协调
  • 项目初期准确分析需求与难点,有利于项目模块拆分与项目推进
  • 为程序赋予多种操作方式,可提升用户体验
  • 需要为项目选择合适的数据结构以确保准确完成任务并兼顾程序效能

结对感受:

  • 本次结对编程整体协作流畅且高效,有效提高了项目的推进速度与质量。两人通过沟通与分工协作,既发挥了各自的技术优势,也通过弥补了个人盲区。

对彼此的建议:

  • 编写程序实现复杂逻辑时,可适当增加注释并同步讲解思路,便于同伴快速理解
  • 对于代码与报告的评估和改进,可实时与同伴分享,以避免思路偏差

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/941606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据范围

废话不多讲,直接给图:(注意:不同版本的c++程序,数据范围可能有所改动!!!)

CF2107E Ain and Apple Tree

拆贡献拆到每个点就是 \(C_{siz}^2\)。 根据世界沉睡童话的结论,我们很大概率能用这种不同的 \(siz\) 组合出很多数,打个表发现都能组合出来,然后依次挂在一条链上就做完了(因为叶子没有贡献)。

2025,为什么公众号编辑器排版决定阅读完成率?——一次从流程到结果的深评

在2025,公众号编辑器选型里,我更关心的不是“功能堆满没”,而是“能否把创作从起笔到发布,做成省心、稳定、可复制的流程”。 这篇测评以“知识类自媒体”常见稿型为样本,完整跑通“选题→结构→AI排版→多平台分…

P14262 [ROI 2015 Day1] 自动好友

P14262 [ROI 2015 Day1] 自动好友 题解题目传送门 我的博客-欢迎光顾 写了一个很另类的容斥。。。比其他dalao的做法复杂不少(为了方便描述,如果 \(i,j\) 是一对潜在好友,我们就称 \((i,j)\) 是一对朋友对) (以下…

傻瓜式处理kauditd0病毒程序记录

服务器莫名奇妙很慢,top指令查看,有个kauditd0进程导致cpu占用很高,自己或者网上尝试了各种方式,都要死灰复燃,最终打算删除启动程序的账号es,这个账号并非我正在使用发账号,直接deluser删除也会有进程占用不让…

win10 升级 win11 后时间更新失败

可能的原因:时间服务器设置问题 设置路径:设置 \(\to\) 时间和语言 \(\to\) 日期和时间 \(\to\) 更改时间服务器可选授时服务器:cn.pool.ntp.org Windows Time 服务问题 若步骤 1 同步失败,可能是 Windows Time 服…

软件工程学习日志2025.10.20

今日概览统一了全站顶部导航的视觉样式,移除各页面导航按钮的 primary 高亮,确保颜色一致与信息层级清晰。 修正了个人中心页的导航,移除指向当前页的“个人中心”按钮,避免自指链接。 启动并验证了本地服务,通过…

P14254 分割(树上计数问题) 题解

P14254 树上组合计数(分割问题)题解 原题链接 一、题目分析 这部分是解题的核心,通过分析条件得出简化问题的关键结论。计数问题先尝试找一下性质:注意到节点的选择只能越来越深 \[d_i>=d_1 \]最关键性质: \[m…

完整教程:开源 C++ QT QML 开发(一)基本介绍

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

102302104刘璇综合实践作业任务一:智能购物平台用户需求调研分析报告——基于195份问卷的用户痛点挖掘

摘要: 本报告基于《智能购物平台调查问卷数据及其可视化》收集的195份有效数据,通过科学的可视化分析方法,围绕用户基础特征、烹饪行为习惯、智能功能需求等维度展开深入研究。在两个星期的调研过程中,我从问卷设计…

软件工程第二次团队作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13559这个作业的目标 使用现代 A…

Hands on Deep Learning Chapter 3 线性神经网络

3 线性神经网络 3.1 线性回归 回归(regression)、预测(prediction)、分类(classification) 3.1.1 线性回归的基本元素 线性模型:对输入特征进行一个仿射变换(affine transformation,加权和对特征进行线性变换…

超越技术范畴:低代码如何重塑企业数字文化

当我们谈论低代码时,目光往往聚焦于其提升开发效率的技术特性。然而,它的深层影响力远不止于此。低代码更像是一颗投入企业静湖的石子,其激起的涟漪,正层层扩散,深刻地重塑着组织的协作模式、创新节奏乃至内在的数…

好用的网址

填验证码(? 题解格式化。 画图。 代码格式化。 纯文字图片生成器。

【C++实战(71)】解锁C++音视频编写:FFmpeg从入门到实战

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

20251020

正睿NOIP 二十连测 A 有 \(m(m \le 95)\) 种药剂,每种药剂有 \(n_i(\sum n_i \le 10^{15})\) 瓶,等级为 \(p_i\)(\(2 \le p_i \le 499\))。要将这些药剂分成两个不相交的集合 \(X, Y\),\(X\) 的价值为其组内所有药…

低代码赋能业务创新:打破数字鸿沟,释放业务潜能

在数字化转型的浪潮中,一个突出的矛盾日益显现:业务部门汹涌的创新需求,与IT部门有限的开发资源之间,形成了一道难以逾越的“数字鸿沟”。当市场部门需要一个临时的活动报名系统,当HR部门渴望一个高效的内部推荐工…

【大模型】大模型训练的几个不同阶段

总结:各方法的典型关联(以大语言模型为例)Pre-Training:先让模型学“通识知识”(如语言、世界知识)。 Supervised Fine-Tuning (SFT):用标注数据让模型学“任务基本模式”(如指令遵循)。 Reward Modeling:训…

详细介绍:1、手把手教你入门设计半桥LLC开关电源设计,LLC谐振腔器件计算

详细介绍:1、手把手教你入门设计半桥LLC开关电源设计,LLC谐振腔器件计算pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family…

十六天

今日重点学习关系型数据库基础,核心掌握三个模块:一是数据表的结构化设计,明确字段类型(如INT、VARCHAR)需与数据属性匹配,避免后续数据存储异常;二是主键的作用,通过实操验证其“唯一标识记录”的必要性——未…