2017-01-07 2 views
1

사용자 입력에서 전자 메일 목록을 검색하는 바이너리 검색이 있습니다. 그러나 사용자가 목록에 이메일을 입력하지 않으면 나는 다른 시간을 입력 할 수 있기를 원합니다. 그러나 while 루프를 다시 시작하는 방법을 모릅니다.이진 검색에서 while 루프의 시작으로 돌아 가기

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

에 :

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=["[email protected]","Password1"],["[email protected]","Password2"],["[email protected]","Password3"] 
    logindata=BubbleSort(logindata) 
    print(logindata) 
    email=input("Enter username") 
    BinarySearch(logindata,email) 

답변

0

그냥 다른 while 루프에서 반복해야하는 부분 추가 ​​ 다음은 내 코드입니다

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

와의 리턴 값 작업을하여 BinarySearch 기능.

BinarySearch의 구현을 변경하여 적절한 값을 반환해야합니다.

가 가 은 다른 절 중 하나가 실행될 때마다 당신은 Not Found를 인쇄하지 않아야

, 그것은 여태

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 
: First <= Last, 당신은 당신이 사용하고있는 다른 플래그를 삭제할 수 있습니다 경우 또한, 당신의 상태에 문제가, 이진 검색이 종료된다 검색이 다시 완료되지 않았으므로 은 아직입니다. while 루프가 BinarySearch이 종료 된 후에 끝까지 인쇄하십시오.

관련 문제