最大子数组之和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报告。
浙公网安备 33010602011771号