在二进制搜索中返回while循环的开始

2024-05-23 20:49:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个二进制搜索来搜索用户输入的电子邮件列表。但是,当用户输入的电子邮件在列表中找不到时,我希望用户能够输入其他时间。但是我不知道如何返回到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)

Tags: 用户falseifemailcountgmailfirstlast
1条回答
网友
1楼 · 发布于 2024-05-23 20:49:01

只需在另一个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

您不应该打印Not Found每当执行else子句时,它还没有被找到,因为搜索还没有重新发送。在BinarySearchwhile循环退出之后,最后打印出来。你知道吗

相关问题 更多 >