Python写个二分法查找
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python写个二分法查找相关的知识,希望对你有一定的参考价值。
笔者是一个通信测试攻城狮,之前做过一段时间的持续集成。工作内容只要就是对主线版本进行基本通信功能守护,测试执行都是自动化完成,也是那个时候开始接触到代码。
当时经常遇到的一个问题是:某一天我们发现版本有重大BUG,但是到上一次我们验证PASS中间已经经历过很多版本,我们需要手动从中间找到第一个出现BUG的版本,当然最简单的方法是二分法,取中间版本,根据有没有BUG再缩小范围,继续取中间版本。。。当时我的想法就是思路很固定,完全可以自动化完成,可惜当时我不会写代码。。。直到今天看Python递归函数才想我何不直接把这么多年的想法实现了?于是今天下午就开始构思,终于有点成果,拿出来和大家分享一下。
#encoding:utf8 from random import randint class BinarySearch: def __init__(self,maxNumber): n = randint(0,maxNumber-1) self.filelist = [] for i in range(maxNumber): f = open(str(i)+‘.txt‘,‘w+‘) if i<n: f.write(‘True‘) self.filelist.append(str(i)+‘.txt‘) else: f.write(‘False‘) self.filelist.append(str(i)+‘.txt‘) f.close() def fread(self,filename): f = open(filename) return f.read()==‘True‘ def newlist(self,clist): mid = len(clist)/2 if self.fread(clist[mid]) == False: return clist[:mid+1] else: return clist[mid:] def FindFirstFalse(self,newfilelist): if len(newfilelist) == 1: return newfilelist[0] elif len(newfilelist) == 2 and self.fread(newfilelist[0]) == True: return newfilelist[1] elif len(newfilelist) == 2 and self.fread(newfilelist[0]) == False: return newfilelist[0] else: return self.FindFirstFalse(self.newlist(newfilelist)) f = BinarySearch(123) print ‘The first False is‘,f.FindFirstFalse(f.filelist)
测试结果:
当然应用时候要根据实际情况将txt文件修改为版本列表
以上是关于Python写个二分法查找的主要内容,如果未能解决你的问题,请参考以下文章