最大子数组之和2

一、实验目的

1、用指定的txt文本文件形式读取数据

2、对二维数组进行最大连续子数组之和的计算(最大矩阵)

3、对代码进行单元测试和代码覆盖率测试

 

二、实验过程

2.1、存储二维数据的文本文件

以txt文本文件形式对数据进行存储

(1)input1.txt文件数据

(2)input2.txt文件数据

 

2.2、实现求取最大子数组代码

2.2.1、读取文本文件的数据并用列表形式保存

#获取数据
def readlines(f):
    lines=f.readlines() #读取文件的所有行
    lists=[]
    for line in lines:
        line=line.strip() #移除字符串头尾指定的字符
        lists.append(line.split(',')) #将数据按“,”进行切割
    lists1=lists[2:] #将数据取出来
    return lists1
f1=open('input1.txt') #读取input1.txt的数据
f2=open('input2.txt') #读取input1.txt的数据
lists1=readlines(f1)   #获取文件f1数据
lists2=readlines(f2)   #获取文件f2数据

此代码对文本文件的数据进行读取,取出所需的代码

2.2.2、求出最大子序列的和

#最大子序列和
def maxSumArray(lists):
    max_sum=int(lists[0]) #获取数组第一个数据
    pre_sum=0
    for i in lists:    #遍历数组lists
        if pre_sum<0:
            pre_sum=int(i)
        else:
            pre_sum+=int(i)
        if pre_sum>max_sum:
            max_sum=pre_sum
    return Max_sum #返回最大子数组之和

此代码求出一序列的最大和,以便于后续的最大子数组的求和

2.2.3、求出最大子数组的和

def Max_sum(arr):
    l=len(arr) #数组的长度
    max_num=0
    for i in range(l): #对数组进行遍历
        res1=list(arr[i]) #赋值下一个数组
        for j in range(i+1,l): 
            lists2=[]
            for x in zip(res1,arr[j]): #用zip对两个数组对应元素进行打包,组成一个元组
                lists2.append(int(x[0])+int(x[1])) #将两个元组值进行相加 
            res1=lists2
            max_num=max(maxSumArray(lists2),max_num) #获取最大的子数组
    return max_num #返回最大子数组的值

此代码可以求出最大的子数组

三、单元测试

进行单元测试需要导入unittest模块

3.1、测试代码

用unittest工具进行单元测试

import unittest #导入unittest工具
class Test(unittest.TestCase):
    def test1(self): #测试用例1
        data=lists1
        result=Max_sum(data)
        self.assertEqual(result,28)
    def test2(self): #测试用例2
        data=lists2
        result=Max_sum(data)
        self.assertEqual(result,964)

if __name__ == "__main__":
    unittest.main()

测试结果:

四、代码覆盖率测试

用coverage工具进行测试

4.1、在cmd命令行执行指行命令coverage run 文件名.py

4.2、在cmd命令行执行命令coverage report查看代码覆盖率

4.3、在cmd命令行执行命令coverage html

4.3.1、生成htmlcov文件

 

4.3.2、文件夹两个html文件

(1)index显示代码覆盖率

(2)_input1_py.html显示代码覆盖情况

其中红色代码表示未覆盖,绿色代表已经覆盖的代码

五、小结

1、python自带了unittest框架,支持单元测试的编写。

2、Coverage是一种用于统计Python代码覆盖率的工具,通过它可以检测测试代码对被测代码的覆盖率如何。Coverage支持分支覆盖率统计,可以生成HTML/XML报告。

posted @ 2021-03-31 17:16  摘一颗星星  阅读(98)  评论(1)    收藏  举报