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文件修改为版本列表

时间: 2024-11-16 04:43:26

Python写个二分法查找的相关文章

python递归函数及二分法查找

函数的递归: 在一个函数的内部调用自己 死循环: 可以无限循环,不会停止 while True: print('我不是递归') 递归: 不是死循环,有最大循环深度 def story(): print('我是递归') story() story() 超过了递归的最大深度报错 RecursionError: maximum recursion depth exceeded while calling a Python object 官网上 源码中设置的递归深度: 1000自己实际测试递归深度: 9

python一个关于二分法查找元素的实现

# coding=utf-8import time def find_ele(alist, ele): if ele < alist[0] or ele > alist[len(alist) - 1]: print("%d not in alist" % ele) return last_index = len(alist) - 1 center_index = last_index // 2 loop_flag = True loop_cout = 0 while loo

python 递归和二分法查找

 1. 递归: 自己调自己难点:不好想,需要找规律不好读  2. 二分法 头,结尾,取中间, 不停的改变左和右,间接改变中间,查询效率非常高 1. 递归(方法一:) # 递归的用处: 遍历树形结构(拿一个数据进行遍历,得到两个结果在进行遍历,得到四个结果...,这是树形结构) import os filePath = "d:/untitled" it = os.listdir(filePath) # 查看文件夹中的文件, # print(it) # 以列表的形式打印 print(&qu

python 实现二分法查找

二分查找图 二叉树: 代码 #!/usr/bin/python #-*-coding:utf-8-*- #---------------------------------------------------------------------------------------- # to_do : binary find # authors: zuoxingyu # time : 2014-06-07 #--------------------------------------------

python的算法:二分法查找(1)

1.什么是二分法查找: 1.从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: 2.如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较. 3.如果在某一步骤数组为空,则代表找不到. 每次都是i减半查找,其时间消耗为O(logn) 最简单的一个循环算法就是: def binary_search_loop(lst,value): low,high=0,len(value)-1 while low<=high: mid=

Python 二分法查找

使用二分法查找前提必须是有序的数列 def search(list,val): start = 0 end = len(list)-1 #判断该数在不在列表中 if val in list: #循环直到找到该数,return退出函数 while 1: mid = int((start + end)/2) #取整数部分 if list[mid] == val: print('你要查找的数的下标为:%s,'%mid) return mid elif list[mid] > val: end = mi

python之路---14 递归 二分法查找

三十二.递归 1.函数自己调用自己 2.官方说明最大深度1000,但跑不到1000,要看解释器, 实测998 3.使?递归来遍历各种树形结构 三十三.    二分法查找 掐头结尾取中间 ,  必须是有序序列 1. 2. 3. 4. 原文地址:https://www.cnblogs.com/amirky/p/10211564.html

python算法之二分查找

说明:大部分代码是在网上找到的,好几个代码思路总结出来的 通常写算法,习惯用C语言写,显得思路清晰.可是假设一旦把思路确定下来,并且又不想打草稿.想高速写下来看看效果,还是python写的比較快.也看个人爱好.实习的时候有个同事对于python的缩进来控制代码块各种喷....他认为还是用大括号合适...怎么说呢,适合自己的才是最好的.我个人的毛病就是,写了几天C,到要转到python的时候,代码中依旧有C的影子..比方大括号问题,比方忘记在while或这for.if.else等后面加":&quo

Python中的二叉树查找算法模块

问题 思路说明 二叉树查找算法,在开发实践中,会经常用到.按照惯例,对于这么一个常用的东西,Python一定会提供轮子的.是的,python就是这样,一定会让开发者省心,降低开发者的工作压力. python中的二叉树模块内容: BinaryTree:非平衡二叉树 AVLTree:平衡的AVL树 RBTree:平衡的红黑树 以上是用python写的,相面的模块是用c写的,并且可以做为Cython的包. FastBinaryTree FastAVLTree FastRBTree 特别需要说明的是:树