小学算法(四则运算)

四则运算

GitHub项目(代码)地址 https://github.com/xiayiLL/-

一、项目要求

  • 能自动生成小学四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!)
  • 除了整数外,还要支持真分数的四则运算
  • 详情请看 http://yz.yzhiliao.com/course/55/task/326/show

二、PSP表格

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四则运算并未完成项目要求,结果仍然会出现负数

posted @ 2020-09-21 08:58  xiayiLL  阅读(300)  评论(0编辑  收藏  举报