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

1.Github:https://github.com/S1mon-fq/S1mon

2. PSP2.1表格


PSP2.1


Personal Software Process Stages


预估耗时(分钟)


实际耗时(分钟)


Planning


计划


30


25


· Estimate


· 估计这个任务需要多少时间


30


25


Development


开发


1140


1360


· Analysis


· 需求分析 (包括学习新技术)


60


55


· Design Spec


· 生成设计文档


60


70


· Design Review


· 设计复审 (和同事审核设计文档)


30


30


· Coding Standard


· 代码规范 (为目前的开发制定合适的规范)


20


15


· Design


· 具体设计


120


120


· Coding


· 具体编码


600


720


· Code Review


· 代码复审


120


150


· Test


· 测试(自我测试,修改代码,提交修改)


120


200


Reporting


报告


90


120


· Test Report


· 测试报告


60


90


· Size Measurement


· 计算工作量


10


10


· Postmortem & Process Improvement Plan


· 事后总结, 并提出过程改进计划


20


20


合计


1260


1510

3.效能分析

生成10000条式子所用的时间:

4.设计实现过程

一共有四个类,Genera类有GeneralOneFormula和Fomulas函数,前者生成式子,后者将式子i写入文档,在Fomulas中需要调用前面GeneralOneFomulas函数。

Answer类有五个函数,其中实现加减乘除运算并返回结果,匹配括号,转换真分数,将答案写入文件

Verify类是对题目进行优化,生成题目序号,判断是否有除数为0,是否出现负数

Judge类实现对答案的核对功能,通过读取文件,按行匹配文件,输出结果

具体函数在代码说明

5.代码说明

Genera:利用rd()函数随机生成数字,运算符一共四个,同样用rd()函数随机选取,放到运算符列表中,然后采用列表,合并符号列表和数字括号列表

def GeneralOneFormula(self):    Range = self.range    # OperateNumbers = random.randint(1, 3)    X1 = int(random.random() * 10000)    X2 = int(random.random() * 10000)    OperateNumbers = X1 % 3 + 1    CountNUmbers = OperateNumbers + 1    Ostyle = [‘+‘, ‘-‘, ‘*‘, ‘÷‘]    # 生成符号list    Operates = []    a = 0    while (a <= OperateNumbers):        # Operates.append(random.choice(Ostyle))        if (a == 0):            Operates.append(Ostyle[X1 % 4])        if (a == 1):            Operates.append(Ostyle[X2 % 4])        if (a == 2):            Operates.append(Ostyle[(X1 + X2) % 4])        a += 1   

Answer:通过正则表达式匹配运算符的位置,不同的是,加减和乘除返回采用的方法不一样,calc函数匹配括号和集成加减乘除运算符的入口,转换成真分数时,如果存在小数点,取到小数点后三位,然后对小数部分四舍五入,然后生成一个真分数

def mul_divOperation(self, s):    sub_str = re.search(‘(\d+\.?\d*[*/]-?\d+\.?\d*)‘, s)    while sub_str:        sub_str = sub_str.group()        if sub_str.count(‘*‘):            l_num, r_num = sub_str.split(‘*‘)            s = s.replace(sub_str, str(float(l_num) * float(r_num)))        else:            l_num, r_num = sub_str.split(‘/‘)            s = s.replace(sub_str, str(float(l_num) / float(r_num)))        sub_str = re.search(‘(\d+\.?\d*[*/]\d+\.?\d*)‘, s)    return s

Verify:提取每个式子中括号中的内容,用计算其结果,只要出现一次负数,即生成新的算式

提取过程中,先找到最左边的左括号,然后再找到最左边左括号右边的右括号,提取出来

def compute_c(self, e1):    num_int = float()    num_int = self.filt_num(e1)    sym_int = self.filt_sym(e1)    flag = self.int_compute(num_int, sym_int)    if flag < 0:        return ‘f‘    else:        return str(flag)

Judge:读入文档,按行匹配,对比答案与所读取的文档,取答案中等号右边的数字与正确答案中空格后的字符串进行比较,输出结果correct,wrong的数目和题号

6.运行测试

生成10000条式子:

生成答案:

答案文档与自己进行-e 功能:

一个全部错误的文档与答案文档进行-e:

只输入-n指令,没有实例化变量:

只输入-n,-r指令:

7.项目小结

这次项目是我第一次用python来编写,python刚自学没多久,对写函数和函数直接的调用不太熟练,请教了班里的同学。跟第一次项目一样,在命令行传参的地方也反复修改了很久,最后才成功实现,大部分功能已经实现,排除重复式子的功能还没有实现,这次项目又大大提升了自己的动手能力。

原文地址:https://www.cnblogs.com/S1mon/p/11689626.html

时间: 2024-10-13 15:12:19

结对编程:自动生成小学四则运算题目的相关文章

结对项目----实现一个自动生成小学四则运算题目的命令行程序

一.Github项目地址:https://github.com/lyh27/exercise 团队成员:卢耀恒3118005065    莫政3118005067 二.需求 自然数:0, 1, 2, …. 真分数:1/2, 1/3, 2/3, 1/4, 1’1/2, …. 运算符:+, −, ×, ÷. 括号:(, ). 等号:=. 分隔符:空格(用于四则运算符和等号前后). 算术表达式: e = n | e1 + e2 | e1 − e2 | e1 × e2 | e1 ÷ e2 | (e),

Individual Project &quot;写一个能自动生成小学四则运算题目的程序&quot;

一.题目简介 写一个能自动生成小学四则运算题目的程序. 初步拟定要实现的功能后,估计一下自己需要花多长时间.编程过程中记录自己实际用了多长时间. 然后和同学们比较一下各自程序的功能.实现方法的异同等等. 二.源码的github链接 https://github.com/gaino1/IndividualProject 三.所设计的模块测试用例.测试结果截图 四.问题及解决方案.心得体会 要想学好C语言,要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自

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

结对项目——自动生成小学四则运算 1.Github项目地址: https://github.com/Vicky-Leung/demo 项目制作人:3218005081梁小燕 3218005083许梓莹 2.PSP表格: PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划  60  159 · Estimate · 估计这个任务需要多少时间 60 159 Development 开发  1770  2166 ·

能自动生成小学四则运算题目的程序

题目要求 能自动生成小学四则运算题目 除了整数外,还要支持真分数的四则运算 支持多个运算符,也就是混合运算 程序支持判断对错,累计分数并倒计时 分析 分为几个函数功能模块:int getChoice() :    功能:用户选择功能 void showMenu():  功能:显示功能的菜单 void doExercise(int n):  功能:计分器 int test(int n);    功能:进行一道题的测试过程 int main();  主函数 源代码转载于李思雨,博客链接:http:/

实现一个自动生成小学四则运算题目的命令行程序

Github项目地址:https://github.com/sumilekaedei/Myapp.git 题目:实现一个自动生成小学四则运算题目的命令行程序. 自然数:0, 1, 2, -. 真分数:1/2, 1/3, 2/3, 1/4, 1'1/2, -. 运算符:+, ?, ×, ÷. 括号:(, ). 等号:=. 分隔符:空格(用于四则运算符和等号前后). 算术表达式: e = n | e1 + e2 | e1 ? e2 | e1 × e2 | e1 ÷ e2 | (e), 其中e, e1

自动生成小学四则运算题目并进行效能分析-改进版

github地址:https://github.com/lzhida/First-assignment/tree/newbranch 改进: 可以删除一些无意义的括号 题目要求: 1.能自动生成小学四则运算题目,并且不能出现负数: 2.支持真分数四则运算 PSP表格     预计耗时(分钟) 是实际耗时(分钟) Planning 计划 30 30 ·Estimate 估计这个任务需要多少时间 180 240 Development 开发 150 180 ·Analysis 需求分析 5 10 ·

自动生成小学四则运算题目(Python实现)

Github项目地址: https://github.com/pirigg/- 题目描述: 通过python语言编写一个能够自动生成小学四则运算的程序(注意是给小学生用的,要是结果出现负数的话他们会很迷茫的!),同时,除了整数外,还要支持真分数的四则运算. Psp表格: PSP2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min) Planning 计划 50 60 Estimate 估计这个任务需要多少时间,并规划大致工作步骤 20 30 Analysis 需求分析 (包

自动生成小学四则运算题目的程序心得

#include<stdio.h>#include<math.h>#include<windows.h>int right=0;int wrong=0;void add(){int a,b,c;a=rand()%100;b=rand()%100;printf("请回答:\n\t\t %d + %d = ",a,b);scanf("%d",c);if(a+b==c){printf("回答正确!\n");right

自动生成小学四则运算题目的程序.心得体会

http://t.cn/RAS67B0 源代码 #include<stdio.h> #include<stdlib.h>#include<time.h>main(){int a,b,op,os; printf(" [天天练,Baby们来挑战吧!]\n");aq1: printf("选择您想挑战的运算法则\n");printf("1.加法 2.减法 3.乘法 4.除法\n");scanf("%d&quo

自动生成小学四则运算题目

目前这个小学四则运算题目的生成器还不完善,仅支持整数的四则运算,在接下来的时间里会利用空余时间继续修改程序. import randomdef Subject_Creater(n): # n 为题目个数 x = 0 y = 0 z = "" i = 0 sum = 0.0 while True: x = random.randint(0,10) # 为变量 x 随机赋值 y = random.randint(1,10) # 为变量 y 随机赋值 z = random.choice(&q