2017-01-07 4 views
0

텍스트 파일의 목록에서 특정 항목을 변경하려고 시도하는 코드가 있습니다. 텍스트 파일에는 전자 메일, 각 라인의 암호가 로그인 시스템과 비슷합니다. 코드는 전자 메일에 대한 사용자 입력을 요구 한 다음 텍스트 파일의 목록에있는 해당 사용자를 이진 검색합니다. 사용자가있는 경우 해당 사용자의 비밀번호를 변경하여 [1] 항목을 목록에 추가하십시오. 여기에 나는이 접근 얼마나, 나는 그것이 많은 밤은 알고 있지만 내가 어떻게 할 수있는 단서를 havent 지금까지텍스트 파일 목록의 특정 항목 변경

def ChangePassword(): 

    while True: 
     email=input("Enter the email you want to change the password for") 
     res=BinarySearch(logindata,email) 
     if res: 
      break 

을 암호를 변경하는 내 코드?
다음은 필요한 경우 이진 검색 자체에 대한 코드입니다. 당신이 당신의 정렬 및 (당신에게 달려있는) 제대로 코드를 검색하고 파일을 가정 구현 가정하면

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 
    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 
+0

파일을 정렬 했습니까? 어쨌든 파이썬 내장 함수는 어쨌든 구현만큼 빠르다. 검색을 다시 구현하는 이유는 무엇입니까? – kabanus

+0

내가 그것을 가리키는 이진 검색을 사용해야하기 때문에, 나는 그것이 효율적이지 않을지라도 그 성가신 것을 알고, 정렬되는 파일에 관해서는 버블 정렬이 알파벳순으로 정렬되어야 하는가? @kabanus –

+0

파일을 읽고 거품을 정렬하고 전자 메일을 바이너리로보고 항목을 변경 한 다음 새 파일이나 원래 파일에 결과를 씁니다. – kabanus

답변

0

의 형식은 "이메일 암호"라인의 무리입니다, 당신은 단순히 원하는 :

def ChangePassword(loginfile): 
    with open(loginfile) as desc: 
     logindata = BubbleSort([line.split() for line in desc.readlines()]) 

    while True: 
     email=input("Enter the email you want to change the password for") 
     res=BinarySearch(logindata,email) 
     if res < 0: 
      break 
     else: print "Not found!" 

    pass = input("Enter new password: ") 
    while pass != input("Please verify: "): 
     pass = input('Mismatch! enter again: ') 

    logindata[1] = pass 
    with open(loginfile,'w') as desc: 
     desc.write("\n".join(" ".join(x) for x in logindata)) 

참고 BinarySearch은 암호가 아닌 색인을 반환해야합니다. 발견되지 않으면 -1. 이것은 작동하지만 해결책을 찾는 아주 기본적인 스케치입니다, 이것을 더 빨리 만드는 방법을 찾으십시오!