码迷,mamicode.com
首页 > 编程语言 > 详细

Python写个二分法查找

时间:2017-09-09 22:38:29      阅读:425      评论:0      收藏:0      [点我收藏+]

标签:通信   查找   方法   文件   遇到   __init__   list   应用   列表   

笔者是一个通信测试攻城狮,之前做过一段时间的持续集成。工作内容只要就是对主线版本进行基本通信功能守护,测试执行都是自动化完成,也是那个时候开始接触到代码。

当时经常遇到的一个问题是:某一天我们发现版本有重大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写个二分法查找

标签:通信   查找   方法   文件   遇到   __init__   list   应用   列表   

原文地址:http://www.cnblogs.com/yanweitao/p/7498971.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!