【问题标题】:returning to the start of a while loop in a binary search在二分搜索中返回到 while 循环的开始
【发布时间】:2017-05-22 05:33:38
【问题描述】:

我有一个二进制搜索来搜索来自用户输入的电子邮件列表。但是,当在列表中找不到用户输入的电子邮件时,我希望用户能够输入另一个时间。但是我不知道如何将它再次返回到 while 循环的开头。 这是我的代码:

def BubbleSort(logindata):
NoSwaps = 1
N = len(logindata)
logindata = list(logindata)
while NoSwaps == 1:
    Count = 1
    NoSwaps = 0
    for Count in range(N-1):
        if logindata[Count] > logindata[Count+1]:
            temp = logindata[Count]
            logindata[Count] = logindata[Count+1]
            logindata[Count+1]=temp
            NoSwaps=1
return tuple(logindata)

def BinarySearch(logindata,email):
    First=0
    Last=len(logindata)-1
    ItemFound = False
    SearchFailed = False
    while ItemFound == False or SearchFailed == False:
        Midpoint = (First + Last) // 2
        if logindata[Midpoint][0] == email:
            ItemFound = True
            print("Email Found")
            break

        elif logindata[Midpoint][0] > email:
            Last = Midpoint - 1
            print("Not Found")

        else:
            First = Midpoint + 1
            print("Not Found")

        return False


if __name__ == "__main__":
    logindata=["tom@gmail.com","Password1"],["harry@gmail.com","Password2"],["jake@gmail.com","Password3"]
    logindata=BubbleSort(logindata)
    print(logindata)
    email=input("Enter username")
    BinarySearch(logindata,email)

【问题讨论】:

    标签: python list python-3.x while-loop binary-search


    【解决方案1】:

    只需在另一个while循环中添加你需要重复的部分:

    email=input("Enter username")
    BinarySearch(logindata,email)
    

    到:

    while True:
        email=input("Enter username")
        res = BinarySearch(logindata,email)
        if res:
            break
    print("Done")
    

    并使用 BinarySearch 函数的返回值。

    您还需要更改BinarySearch 的实现以返回适当的值。另外,您的条件有问题,二分查找在First <= Last 时结束,您可以删除您正在使用的其他标志:

    def BinarySearch(logindata,email):
        First=0
        Last=len(logindata)-1
        while First <= Last:
            Midpoint = (First + Last) // 2
            if logindata[Midpoint][0] == email:
                print("Email Found")
                return True   
            elif logindata[Midpoint][0] > email:
                Last = Midpoint - 1
            else:
                First = Midpoint + 1
        print("Not found")
        return False
    

    您不应该在执行 else 子句之一时打印Not Found,因为尚未重新开始搜索,所以还没有找到它尚未。在退出BinarySearchwhile 循环后,最后打印出来。

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多