首页 > 其他分享 >四则运算题目的生成

四则运算题目的生成

时间:2024-09-26 20:24:11浏览次数:9  
标签:题目 calculate 测试 四则运算 程序 生成 答案 expression 表达式

四则运算题目的生成

github地址:https://github.com/gomevie/gomevie/tree/main

这个作业属于哪个课程 广工计院计科34班软工
这个作业要求在哪里 作业要求
这个作业的目标 生成数学四则运算的练习题和答案
作业成员 陈国威

PSP表格

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

代码简解

导入模块
random:用于生成随机数。
sympy:用于数学表达式的解析和计算。
argparse:用于处理命令行参数。

全局变量:
operate:一个字典,用于将运算符映射到它们的字符串表示。

函数定义:
save_data:将表达式和结果保存到两个文件中。
calculate_expression:计算数学表达式并返回结果的分数形式。
is_true_fraction:检查表达式是否为真分数。
is_valid_expression:检查表达式是否有效。
generate_true_fraction:生成一个真分数。
generate_expressions:生成指定数量的四则运算表达式。
main:主函数,生成表达式并保存到文件。
read_answers:从文件中读取答案。
compare_answers:比较正确答案和学生答案。
write_grades_to_file:将成绩统计结果写入文件。
calculate_grades:计算并记录学生答案的正确率。

命令行参数处理:
使用argparse库来定义和解析命令行参数。
参数包括题目数量、运算最大值、学生答案文件名、正确答案文件名和输出文件名。

主程序:
如果没有提供学生和正确答案文件,将生成新的表达式和答案。
如果提供了学生和正确答案文件,将比较答案并生成成绩统计。

错误处理:
在多个地方使用了异常处理来捕获错误,并在发生错误时返回错误信息。
下面是项目的流程图:

函数精解

generate_expressions(max_value, count)

功能
生成指定数量的四则运算表达式。

实现细节
1.使用random.sample随机选择1到3个运算符。
2.循环遍历运算符,生成两个随机真分数,并构建表达式。
3.随机添加括号,以增加表达式的复杂性。

calculate_expression(expression)
功能
计算给定的数学表达式,并将其结果转换为分数形式。

实现细节
1.使用sympify函数解析和计算表达式。
2.如果结果是整数,直接转换为整数。
3.如果结果不是整数,转换为分数形式,并限制分母的大小。

save_data(data, filename_expressions, filename_results)
功能
将生成的表达式及其计算结果保存到文件中。

实现细节
1.使用with open打开两个文件,一个用于保存表达式,另一个用于保存结果。
2.遍历数据,将表达式和结果写入对应的文件。

read_answers(filename)
功能
从文件中读取答案。

实现细节
1.使用with open打开文件。
2.读取每一行,并去除空白字符。

compare_answers(correct, student)
功能
比较正确答案和学生的答案。

实现细节
1.遍历正确答案和学生答案,比较它们是否相同。
2.计算正确和错误的答案数量。

write_grades_to_file(correct_count, wrong_count, correct_list, wrong_list, output_file)
功能
将成绩统计结果写入文件。

实现细节
1.使用with open打开文件。
2.将正确和错误的答案数量以及对应的题目编号写入文件。

calculate_grades(correct_answers_file, student_answers_file, output_file)
功能
整合读取答案、比较答案和写入成绩的流程。

实现细节
1.调用read_answers读取正确答案和学生答案。
2.调用compare_answers比较答案。
3.调用write_grades_to_file将结果写入文件。

main(max_value, count)
功能
程序的主函数,生成表达式并保存结果。

实现细节
1.检查输入参数的有效性。
2.调用generate_expressions生成表达式。
3.调用save_data保存结果。

代码的主要功能是生成数学表达式和答案,然后比较学生的答案和标准答案。关键函数包括生成表达式、计算表达式、保存数据、读取数据、比较答案和写入成绩。

性能分析

性能分析的目的在于识别程序中的性能瓶颈,以便进行必要的优化。为此,利用了Python的cProfile模块来收集程序运行时的性能数据,如图:

主要性能瓶颈
分析结果显示,generate_expressions函数是程序中运行时间最长的部分,平均耗时0.353秒。该函数负责生成数学表达式,其性能对整个程序的响应速度有直接影响。

此外,main函数也显示出较高的耗时,平均耗时0.354秒。由于main函数是程序的入口点,并且调用了generate_expressions,因此其性能同样关键。

is_valid_expression和is_true_fraction函数虽然单独的运行时间不长,但它们在程序中被频繁调用,累计耗时分别为0.153秒和0.0961秒,表明这些函数的总体影响可能比单个调用的耗时要大。

calculate_expression函数的运行时间为0.0965秒,考虑到其在表达式计算中的核心作用,这一部分的性能同样值得关注。

Sympy库中的sympify和parse_expr函数也显示出了较高的耗时,分别为0.319秒和0.308秒。这些函数用于解析和处理数学表达式,它们的性能直接影响到程序的计算效率。

性能数据分析
从性能数据中可以看出,程序的性能在很大程度上受到数学表达式生成和解析函数的影响。这些函数的运行时间占据了程序总运行时间的大部分。

结论
性能分析揭示了Myapp.py的性能特点和潜在瓶颈。虽然当前的分析并未涉及具体的优化措施,但它为未来的性能改进提供了重要的数据支持和方向指导。通过识别出关键函数的性能表现,可以更有针对性地进行后续的优化工作。

单元测试

概述
单元测试是软件开发过程中的关键环节,旨在验证程序的各个独立组件是否按预期工作。本次测试针对的是“四则运算”项目中的表达式计算功能,测试脚本位于test_and_analysis目录下。

测试范围
测试覆盖了以下几种情况:

正常表达式,结果为整数:
测试用例验证了程序能够正确计算整数结果的表达式。

正常表达式,结果为分数:
测试用例验证了程序能够正确计算分数结果的表达式。

正常表达式,结果为带分数:
测试用例验证了程序能够正确处理和计算带分数的表达式。

含错误的表达式:
测试用例验证了程序能够识别并提示错误信息的无效表达式。

测试方法
测试使用了Python的unittest框架,通过断言(assert)来验证每个测试用例的预期结果。测试脚本包括:
test_calculate_expression():测试计算表达式的功能。

测试结果
测试结果显示,所有测试用例均通过,没有发现错误或异常行为。

测试代码

def test_calculate_expression():
  # 正常表达式,结果为整数
  assert calculate_expression("2+2") == "4"
  assert calculate_expression("299+201") == "500"

   # 正常表达式,结果为分数
  assert calculate_expression("1/2 + 1/3") == "5/6"
  assert calculate_expression("1/18 + 2/9") == "5/18"

  # 正常表达式,结果为带分数
  assert calculate_expression("3+2/3") == "3'2/3"
  assert calculate_expression("1/2+2/3") == "1'1/6"

  # 含错误的表达式
  assert calculate_expression("a+b").startswith("Error:")
  assert calculate_expression("2 + /3").startswith("Error:")

`
分析
测试结果表明,程序能够正确处理各种类型的数学表达式,并在遇到无效输入时给出适当的错误提示。这表明计算表达式的函数具有良好的健壮性和准确性。

结论
单元测试为程序的可靠性提供了有力的证据。所有测试用例的成功执行表明,当前版本的计算表达式功能符合预期,可以进行后续的集成和系统测试。

终端测试

概述
错误处理是确保软件健壮性的重要部分。通过测试程序对错误输入和异常情况的处理,可以验证程序的稳定性和用户友好性。

测试范围
本次测试专注于验证程序对以下错误情况的处理:

非法的命令行参数:
测试程序对负数题目数量和未提供的运算最大值的处理。

文件不存在:
测试程序在读取不存在的文件时的错误提示。

测试方法
测试通过直接在命令行中输入特定的参数来进行。测试脚本包括:

输入负数题目数量和未提供的运算最大值。
指定不存在的文件作为输入。

测试结果
测试结果显示,程序能够正确识别并处理错误情况,具体如下:

非法的命令行参数:

输入负数题目数量时,程序抛出ValueError,提示“参数必须是给定的自然数。”
未提供运算最大值时,程序同样抛出ValueError,提示“运算最大值必须是给定的自然数。”
文件不存在:
当尝试读取不存在的文件时,程序抛出FileNotFoundError,并明确指出文件不存在。

分析
测试结果表明,程序具备良好的错误识别和处理能力。对于非法的命令行参数和不存在的文件,程序能够给出清晰的错误提示,帮助用户了解问题所在。

结论
通过本次测试,验证了程序在遇到错误输入和异常情况时的稳定性和用户友好性。程序的错误处理机制能够有效地指导用户进行正确的操作,提高了程序的健壮性和可靠性。

总结

该项目成功实现了一个四则运算表达式生成与计算的应用程序。程序以其高效的算法和全面的错误处理机制为亮点,确保了在面对各种输入时都能稳定运行并给出准确的反馈。用户界面简洁直观,便于用户快速理解和操作。

程序在处理表达式生成和计算方面展现了出色的性能,同时能够优雅地处理异常情况,为用户提供了有用的错误信息,从而提升了整体的用户体验。此外,程序的文档齐全,增强了其可维护性和可扩展性。

标签:题目,calculate,测试,四则运算,程序,生成,答案,expression,表达式
From: https://www.cnblogs.com/gomevie/p/18434261

相关文章

  • SSRF类型的CTF题目[De1CTF 2019]SSRF Me1
    启动BUUCTF靶场,先查看一下提示:显示出flag的文件路径是/flag.txt发现是一段python代码,整理一下:#!/usr/bin/envpython#encoding=utf-8fromflaskimportFlaskfromflaskimportrequestimportsocketimporthashlibimporturllibimportsysimportosimportjson......
  • 资本(生成函数)
    $\quad$其中$n\le1e3$、$m\le1e9$、$T\le10$。$\quad$这是一个排列问题,所以我们可以考虑指数型生成函数,这里我们称\(x^n\)的系数为\(\frac{x^n}{n!}\)之前的系数,下文记作\([x^n]\)。$\quad$我们定义函数\(f_{k}(x)=\sum_{n=0}^{k}\frac{x^n}{n!......
  • 免费AI写作搭配数据采集,一键生成多篇文章
     简数采集器可快速采集大量丰富的数据信息,供免费AI写作接口使用,一键批量生成多篇原创文章。目前支持的免费AI写作接口有:百度文心一言、阿里通义千问、Kimi大模型、字节跳动豆包、讯飞星火大模型等。详细操作方法如下:1.开通并接入AI写作接口1)首先,开通合适的AI写作API......
  • [算法] 次小生成树与单源次短路
    发现NOIP大纲里有这个,所以写一写次小生成树分为严格次小生成树和非严格次小生成树,前者要求此生成树的权值和严格大于最小生成树,后者是非严格大于;对于这个问题,我们首先求出原图的最小生成树,然后发现次小生成树是最小生成树只删一条边,然后加一条边得到的,于是我们可以枚举要加的......
  • AI跨时空拥抱合成视频爆火,AI图生图,图生视频操作简单。AI视频生成器
    目前AI跨越时空拥抱的视频爆火,以ai拥抱为例,可以看到这类型的视频,流量都不低。 AI项目玩法有很多,例如:AI生成肖像视频、老照片视频、拥抱视频、AI原创视频、搞笑视频、图转视频、AI二次元视频。AI项目玩法逻辑玩法一:获取使用AI小程序,生成视频,发布视频作品到各平台,吸粉......
  • VScode开发STM32笔记(一)生成bin文件
    操作步骤软件条件1、基于stm32-for-vscode工具开发;2、项目处于打开状态,且生成elf文件;具体的安装环境详见文档:https://blog.csdn.net/weixin_42435984/article/details/141894449具体操作1、通过VScode打开对应的STM32项目;2、使用stm32-for-vscode工具对其进行编译;3......
  • 如何使用Flux+lora进行AI模型文字生成图片
    目录概要前期准备部署安装与运行1.部署ComfyUI 本篇的模型部署是在ComfyUI的基础上进行,如果没有部署过ComfyUI,请按照下面流程先进行部署,如已安装请跳过该步:(1)使用命令克隆ComfyUI(2)安装conda(如已安装则跳过)(3)创建虚拟环境 (4)安装pytorch (5)安装需要的依赖2.......
  • 轻松创作原创文章,AI智能写作工具为你一键生成!
    在这个信息泛滥的时代,原创内容成为了稀缺资源。对于创作者而言,如何在快节奏的生活中保持高质量的输出,成为了一个巨大的挑战。AI智能写作工具的崛起,为我们提供了一种全新的解决方案。以下是一篇探讨AI智能写作工具深度价值的文章。一、AI智能写作工具:解放创作者的生产力......
  • 电子印章如何生成
    怎么生成电子印章?生成电子印章并利用e章宝盖章软件进行应用,可以遵循以下步骤进行:一、生成电子印章方法一:使用e章宝软件的一键抠章功能准备印章图片:首先,将实体印章盖在一张A4白纸上,然后使用扫描仪或高像素相机进行扫描或拍照,以获得清晰的印章图片。建议使用扫描方式,以避免拍照时的光......
  • .NET 工具库高效生成 PDF 文档
    前言QuestPDF是一个开源.NET库,用于生成PDF文档。使用了C#FluentAPI方式可简化开发、减少错误并提高工作效率。利用它可以轻松生成PDF报告、发票、导出文件等。项目介绍QuestPDF是一个革命性的开源.NET库,它彻底改变了我们生成PDF文档的方式。QuestPDF的核心思想......