基于python的四则运算自动生成的命令行程序

news/2024/9/28 19:13:52/文章来源:https://www.cnblogs.com/ybb-code/p/18438281
这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230
这个作业的目标 基于python的四则运算自动生成的命令行程序
团队成员 姚彬彬 3122006324

一.Github地址
https://github.com/ybb-ybbbb/3122006324_Four-arithmetic-operations

二.项目要求
使用 -n 参数控制生成题目的个数,例如

Myapp.exe -n 10

将生成10个题目。

使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围,例如

Myapp.exe -r 10

将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。该参数必须给定,否则程序报错并给出帮助信息。

生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1− e2的子表达式,那么e1≥ e2。
生成的题目中如果存在形如e1÷ e2的子表达式,那么其结果应是真分数。
每道题目中出现的运算符个数不超过3个。
程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。
生成的题目存入执行程序的当前目录下的Exercises.txt文件,格式如下:

四则运算题目1
四则运算题目2
……

其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。

在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件,格式如下:

答案1
答案2

特别的,真分数的运算如下例所示:1/6 + 1/8 = 7/24。

程序应能支持一万道题目的生成。
程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计,输入参数如下:

Myapp.exe -e .txt -a .txt

统计结果输出到文件Grade.txt,格式如下:

Correct: 5 (1, 3, 5, 7, 9)

Wrong: 5 (2, 4, 6, 8, 10)

其中“:”后面的数字5表示对/错的题目的数量,括号内的是对/错题目的编号。为简单起见,假设输入的题目都是按照顺序编号的符合规范的题目。
三.PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 40 35
- Estimate - 估计这个任务需要多少时间 40 35
Development 开发 285 300
- Design Spec - 需求分析 (包括学习新技术) 50 45
- Design Review - 生成设计文档 30 35
- Coding Standard - 设计复审 40 35
- Design - 具体设计 45 60
- Coding - 具体编码 50 70
- Code Review - 代码复审 30 15
- Test - 测试(自我测试,修改代码,提交修改) 40 40
Reporting 报告 110 135
- Test Repor - 测试报告 50 70
- Size Measurement - 计算工作量 40 50
- Postmortem & Process Improvement Plan - 事后总结, 并提出过程改进计划 20 15
All 合计 425 470

四.项目框架

  • 该项目由8个子函数组成
  • 流程图

1.导入模块

2.性能分析装饰器 performance_analysis

3.解析命令行参数 parse_arguments

4.生成随机的四则运算表达式 generate_expression

函数generate_expression(range_limit),它用于生成随机的四则运算表达式。函数接受一个参数range_limit,表示数值的范围。函数内部使用了一个列表operators来存储运算符+、-、和/,然后使用random.choice()函数随机选择一个运算符。如果选择的运算符是/,则生成一个真分数,分子和分母都是在1到range_limit之间的随机整数;如果选择的运算符不是/,则生成一个自然数,范围也是1到range_limit之间的随机整数。最后,函数返回生成的表达式作为字符串。
5.计算表达式的答案calculate_answer

6.保存题目和答案到文件save_exercises_and_answers

7.评判题目和答案evaluate_exercises_answers

evaluate_exercises_answers的函数,用于评判题目和答案。函数接受两个参数,exercises_file和answers_file,分别表示题目文件和答案文件的路径。在函数内部,它首先打开题目文件和答案文件,并使用zip函数将两个文件的内容一一对应地组合在一起。然后,它通过循环遍历每个题目和答案,使用input函数从用户获取学生的答案,并将题目、期望答案和学生答案组成一个元组,添加到student_answers列表中
8.命令行执行函数main

五.测试

  • 测试生成15个题目,范围100以内

    题目

    答案

    测试结果与预期一致
  • 测试评判操作
    输入所有算式以错误答案

    结果

    符合预期
    六.总结
    项目初期遇到了许多bug,通过在网上的学习和对部分资料的参考,改进了程序,感触颇深

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

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

相关文章

章16——坦克大战1——绘图、事务

有关paint方法为什么会被调用JAVA的事件处理机制 事件发生的地方和事件处理的地方是不一样的:

WINCCV7.5SP2VBA编程8-通过事件执行脚本

这一篇在新浪博客发表过,审核周期有点长,为了避免丢失,这里再记录一遍。 有三种途径执行Wincc画面设计器的VBA脚本:事件、用户自定义菜单和工具栏、VBA编辑器。 前面的学习是通过VBA编辑器执行的VBA程序,现在通过事件来练习VBA程序执行。 还是在前面WINCC项目程序来做练习…

WinToUSB 9.0 离线注册

WinToUSB 9.0 qt程序,注册验证代码与EasyUEFI 大同小异,这里仅记录相关类、函数地址 关联 https://www.cnblogs.com/DirWang/p/18149030 目录WinToUSB 9.0CActivationDlgCActivationDlg QMetaObject__dCActivationRegisterPageCActivationRegisterPage QMetaObject__dCActiva…

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

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230这个作业的目标 结对实现一个自动生成小学四则运算题目的命令行程序项目一、项目开发人员以及仓库地址 1、开发人…

【漏洞分析】20240507-SATURN:当闪电贷遇上有缺陷的通缩机制

背景信息 2024 年 5 月 6 日,SATURN 代币遭受价格操控攻击,损失 15 BNB。攻击发生的原因是由于 SATURN 代币的代币通缩机制设计不合理,使得攻击者可以通过燃烧池子中的 SATURN 代币来操控价格完成获利。项目社媒:https://x.com/Saturn_POM 社媒告警:https://twitter.com/C…

卫生纸国家标准查询 All In One

卫生纸国家标准查询 All In One 强制标准 推荐标准 指导性技术文件卫生纸国家标准查询 All In One国家标准全文公开系统强制标准 推荐标准 指导性技术文件 demos卫生纸 808080序号 标准号 是否采标 标准名称 状态 发布日期 实施日期1 GB/T 20808-2022纸巾 现行 2022-04-15 2023…

ai换脸工具roop 食用教程

1. 准备工作 开源项目地址 https://github.com/s0md3v/roop说明文档 https://docs.facefusion.io/usage/cli-argumentspython环境安装必须是python3.10版本 2 部署 git clone仓库 git clone https://github.com/s0md3v/roop.git2.1 conda创建虚拟环境 conda create -n env_name…

C# ASP.NET Core Web API 框架 实现向手机发送验证码短信

本文章主要是在C# ASP.NET Core Web API框架实现向手机发送验证码短信功能。这里我选择是一个互亿无线短信验证码平台,其实像阿里云,腾讯云上面也可以。首先我们先去 互亿无线 https://www.ihuyi.com/api/sms.html 去注册一个账号 注册完成账号后,它会送10条免费短信以及通…

WFUZZ模糊测试

WFUZZ模糊测试 使用指南 选项: -h/--help :这个帮助 --help : 高级帮助 --filter-help : 过滤语言规范 --version : Wfuzz 版本详细信息 -e <type> :可用编码器/有效负载/…

2. 两数相加题解

题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 1:输入:l1 = [2,4,3]…

一些cookie的知识点

cookie属性: 1.domain:指定了cookie应该被发送到哪些域,默认情况下,cookie只会被发送到设置它的那个域。可以设置更广泛的域,比如 .example.com,这样所有子域都可以访问这个cookie。这里我们简单来了解一下域名和子域名。子域名定义:子域名是在域名前面添加的一个前缀,…