• 小学算法(四则运算)


    四则运算

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

  • 相关阅读:
    Web.config配置详解
    vs2010下创建webservice
    WinForm如何调用Web Service
    Android动画的两种使用方式。
    ES6介绍
    django批量form表单处理
    django生命周期示意图
    django中的构造字典(二级菜单,评论树,购物车)
    django中介模型,CBV模型,及logging日志配制
    django中csrftoken跨站请求伪造的几种方式
  • 原文地址:https://www.cnblogs.com/xiayiLL/p/13703669.html
Copyright © 2020-2023  润新知