zoukankan      html  css  js  c++  java
  • 小学算法(四则运算)

    四则运算

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

  • 相关阅读:
    ruby中nil?, empty? and blank?
    dialog插件demo
    Oauth2.0 QQ&微信&微博实现第三方登陆
    SSM框架应用
    点击<a>标签后禁止页面跳至顶部
    使用Node.js+Hexo+Github搭建个人博客(续)
    软件项目托管平台
    【转载】 Eclipse注释模板设置详解
    Markdown 简介及基础语法
    SpringMVC简介
  • 原文地址:https://www.cnblogs.com/xiayiLL/p/13703669.html
Copyright © 2011-2022 走看看