zoukankan      html  css  js  c++  java
  • 课后作业2

    1、Fork到自己远程仓库的码云项目地址
    https://gitee.com/wangjingxian/personal_project41656.git
    2、在开始实现程序前,在下述PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间。并说明估计根据。

    3、程序对表达式类型的支持程度。描述你的程序对不同类型表达式求值的支持程度。
    (1)能支持两个操作数,一种运算符。

    (2)能支持两个操作数的简单四则运算(只有一个操作符)。

    (3)能支持简单混合四则运算(最多有3个操作符,没有括号)。

    (4)能支持稍微复杂的混合四则运算(最多3个操作符,有括号)。

    4、程序设计与实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你实现算法的关键部分(不必列出源代码),以及实现过程中遇到的关键问题与困难。
    (1)代码组织情况。
    在本次作业中,一共有11个类,一个是可执行程序,其它均为测试类。在我的可以执行程序Calculator.py中,一共有5个函数,函数ride_except()计算一个不包含括号的最小乘除计算;在数学中,如果一个表达式中没有括号,有加减乘除四中符号,其运算规则为,先算乘除后算加减,从左向右计算,函数recursion()在不含括号时,乘除先递归运算完;函数add_sum()计算没有乘除的表达式(不能含有括号);函数basic_operation()按照空格、空字符拆分,若加减乘除并存的情况下,调用加减函数和递归函数,进行数学运算;函数calculate()为本功能的核心函数,可计算包含括号的表达式,使用的是re包中的search方法,进行括号匹配。
    (2)关键函数流程图。
    核心函数为calculate(),函数流程图如下:

    (3)说明实现算法的关键部分。
    输入一个表达式,可以有加、减、乘、除、括号,使用re.search方法,判断是否有括号,如果没有括号,调用basic_operation()进行运算,输出结果,结束;如果有括号,去掉最内层括号,返回新表达式,再次使用re.search方法判断是否含有括号,若没有调用basic_operation(),打印结果,结束,如果还有括号就继续去掉括号、判断,直到没有括号,打印输出结果结束为止。
    (4)实现过程中遇到的问题与困难。
    遇到的困难是,如果输入一个数字之后连续输入运算符号,再输入一个数字,这样正则表达式无法进行相应匹配,从导致运算不出结果。
    还有就是输入非数学运算符例如”:,&,|”等,这个正则表达式可以解决,可以将这些非数学运算符跳过,只进行有效数学运算符的运算。
    5、程序单元测试展示。展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试得到的测试覆盖率截图,发表在博客中。
    单元测试代码:展示all_test1.py内容

    执行结果:

    说明:
    在Python中使用单元测试,需要导入被测类其中的某一个模块,还需要导入Python强大的unittest,单元测试类。创建一个类,将被测模块进行调用,self.assertEqusl(x,y)需要传入两个参数,第一个参数代表被测模块的返回值,第二个参数代表期望值,若返回值与期望值一致,则通过测试。
    6、程序中的异常处理说明。在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。
    在输入一个数字之后,输入连续运算符,再输入数字,例如:1 +*/ 4,
    会有异常

    正则无法匹配连续数学运算符
    其它测试类说明:
    ride_except_test.py 测试乘除
    recursion.py 不含括号表达式的,没有乘除跳出递归,有乘除进行递归
    add_sum.py 加减运算
    basic_operation_test.py不含括号的运算
    calculate_test.py 含括号的运算
    all_test1.py 正常操作
    all_test2.py 每输入一个元素添加一个空格
    all_test3.py 连续输入操作符
    all_test4.py 输入浮点型数
    all_test5.py 输入非操作符,例如":","&",非操作符号将被忽略
    all_test6.py 输入负数浮点数
    7、在你实现完程序之后,在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间。

  • 相关阅读:
    Solon 特性简集,相较于 Springboot 有什么区别?
    Solon 1.2.12 发布,新的惊喜
    Springboot mini
    Springboot mini
    Springboot mini
    Springboot mini
    Springboot mini
    Springboot mini
    Springboot mini
    CODING 静态网站服务升级,快速、稳定、高拓展!
  • 原文地址:https://www.cnblogs.com/Wangjingxian/p/9914630.html
Copyright © 2011-2022 走看看