四则运算
GitHub项目(代码)地址 https://github.com/xiayiLL/-
一、项目要求
- 能自动生成小学四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!)
- 除了整数外,还要支持真分数的四则运算
- 详情请看 http://yz.yzhiliao.com/course/55/task/326/show
二、PSP表格
PSP |
Personal Software Process Stages |
预估时间 | 实际时间 |
Planning | 计划 | 5 | 5 |
Estimate | 估计这个任务需要多少时间 | 5 | 5 |
Development | 开发 | 360 | 525 |
Analysis | 需求分析 | 20 | 30 |
Design | 具体设计 | 30 | 40 |
Coding | 具体编码 | 280 | 400 |
Code Review | 代码复查 | 20 | 40 |
Test | 测试 | 20 | 15 |
Repoting | 测试报告+博客 | 60 | 110 |
Test Report | 计算工作量 | 20 | 20 |
Postmortem | 事后总结,并提出改进计划 | 30 | 50 |
sum | 时间总和 | 480 | 715 |
三、解题思路
根据项目要求,可以把项目分类两个部分,一是生成计算式,二是计算值
1.生成计算式,设计函数suanfa(),产生n(2-5)个以内的随机数,n-1个随即符号,对应产生式子,并输出。还设置了四则运算的优先级(先乘除后加减)
2.计算值,设计函数整数四则运算newint(),真分数四则运算newfra(),各自计算结果。
四、设计实现过程
函数:
newint() | 整数四则运算 |
newfra() | 真分数四则运算 |
suanfa() | 生成式子,调试,设置四则运算优先级 |
main() | 主函数 |
五、代码说明
1.生成式子
1 str_formula = "" 2 for i in range(n): #输出四则运算式子 3 if i < n-1: 4 str_formula += str(num[i]) + opr[fh[i]] 5 else: 6 str_formula += str(num[i]) + '=' 7 print(str_formula)
2.四则运算优先级(先乘除后加减)
1 while(p<n-1): #乘除法 3 p = p+1 4 if fh[i] == 2 or fh[i] == 3: 5 num[i] = newint(fh[i],num[i],num[i+1]) 7 del num[i+1] 8 del fh[i] 10 count+=1 11 i = i-1 13 i=i+1 15 16 n = n-count 18 val = newint(fh[0],num[0],num[1]) 19 for i in range(n-2): #加减法 21 val = newint(fh[i+1],val,num[i+2])
六、试行结果
七、单元测试
import unittest from sizeyunsuanxiaoxue import newint class TestFun(unittest.TestCase): times = 0 @classmethod def setUpClass(self): print('Test begining:setUpclass........') def setUp(self): # 每个测试用例执行之前都会执行该方法 TestFun.times += 1 print('setUp', TestFun.times) def tearDown(self): # 每个测试用例执行之后都会执行该方法 TestFun.times += 1 print('tearDown', TestFun.times) def test1(self): #运算测试 test = newint(2,5,4) result = 20 self.assertEqual(test,result) @unittest.skipIf(True, 'no') def test5(self): print('跳过!') @classmethod def tearDownClass(cls): #测试结束 print('Test End:tearDownClass.......') if __name__ == '__main__': unittest.main()
由于主代码中只有一个函数是带参的,其他全是无参函数,测试无意义,所以,此单元测试只测试了一个带参函数
测试结果如图
八、优缺点
1.优点
1.1能生成多个数字的四则运算
1.2设计了算术的优先级
2.缺点
2.1函数过于密集,未优化代码;
2.2整数四则运算部分未完善,如果除法遇到小数,会进行向下取整计算;
2.3真分数运算部分未完善,只能进行两个数字的真分数运算;
2.3四则运算并未完成项目要求,结果仍然会出现负数