편집 기록

편집 기록
  • 프로필daewon님의 편집
    날짜2021.11.25

    파이썬 pickle 을 이용해 전화번호부 구현하기 중 에러


    • 피클 모듈로 저장한 전화번호부 파일을 읽는다.
    • 사용자에게 이름을 입력 받는다.
    • 사용자가 ""를 입력하면, 프로그램을 종료한다.
    • 사용자가 전화번호부에 있으면, 전화번호를 출력한다.
    • 사용자가 전화번호부에 없다면, 사용자를 사전(dictionary)에 추가하고 파일로 저장한다.

    [프로그램 설계]

    다음 기능을 함수로 분리하세요.

    • def readPhonebook: # 전화번호부 읽기
    • def writePhonebook: # 전화번호부 파일에 쓰기
    • def searchPhonebook(name) # 전화번호부에서 이름을 검색한다.
    • def appendPhonebook(name) # 전화번호부에 이름을 추가한다.

    [전화번호부] pickle 모듈

    
    import pickle 
    
    phoneDic = {
        "김갑순": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***",
        "누구나": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***",
        "김갑돌": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***",
        "아무개": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***"
    }
    
    print(phoneDic)
    
    f = open("phonebook.p", 'wb')
    pickle.dump(phoneDic, f)
    f.close()
    

    소스코드

    def readPhonebook(): #피클 함수를 통해 저장한 전화번호 목록을 읽는다.
        import pickle
        f = open('phonebook.p', 'rb')
        phoneDic = pickle.load(f)
        f.close()
    def writePhonebook(): # 전화번호부 파일에 쓰기
        import pickle
        global phoneDic
        phoneDic = { "김갑순": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***", "누구나": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***", "김갑돌": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***", "아무개": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***" }
        print(phoneDic)
        f = open('phonebook.p', 'wb')
        pickle.dump(phoneDic, f)
        f.close()
    def appendPhonebook(who): #이름을 입력받아서 저장
        import pickle
        with open('phonebook.p','wb') as fw:
            pickle.dump(','+'{'+who+' : xxx-xxxx-xxxx'+'}', fw)
            print(phoneDic)
    def searchPhonebook(): #이름을 전화번호 목록 중에서 찾는다.
        import pickle
        f = open("phonebook.p", 'rb')
        phoneList = str(f.readlines())
        f.close()
        print(phoneList)
    
        phoneDic={}
        for phone in phoneList:
            nn = phone.split(' ')   # 리스트를 만든다.
            phoneDic[nn[0]] = nn[1]     # 사전에 더해준다.
    
        for key, value in phoneDic.items():
            print(key, value)
    
        while True:
            who = input("enter name :")
            number = phoneDic.get(who)
            if (number == None):
                print(who + ' : 전화번호부에 없습니다.')
                appendPhonebook(who)
                break
            elif (who == '\"\"'):
                break
            else:
                print('phone number:' + number)
    readPhonebook()
    writePhonebook()
    searchPhonebook()
    

    이렇게 작성하였는데

    Traceback (most recent call last):
      File "C:/Users/hjdyd/OneDrive/바탕 화면/data/1.py", line 47, in <module>
        searchPhonebook()
      File "C:/Users/hjdyd/OneDrive/바탕 화면/data/1.py", line 29, in searchPhonebook
        phoneDic[nn[0]] = nn[1]     # 사전에 더해준다.
    IndexError: list index out of range
    

    이런 오류가 발생하네요.

  • 프로필초보님의 편집
    날짜2021.11.25

    파이썬 질문입니다.ㅠㅠ


    l  피클 모듈로 저장한 전화번호부 파일을 읽는다.
    
    l  사용자에게 이름을 입력 받는다.
    
    l  사용자가 ""를 입력하면, 프로그램을 종료한다.
    
    l  사용자가 전화번호부에 있으면, 전화번호를 출력한다.
    
    l  사용자가 전화번호부에 없다면, 사용자를 사전(dictionary)에 추가하고 파일로 저장한다.
    
    [프로그램 설계]
    
    # 다음 기능을 함수로 분리하세요.
    
    l  def readPhonebook:                  # 전화번호부 읽기
    
    l  def writePhonebook:                 # 전화번호부 파일에 쓰기
    
    l  def searchPhonebook(name)        # 전화번호부에서 이름을 검색한다.
    
    l  def appendPhonebook(name)       # 전화번호부에 이름을 추가한다.
    
    [전화번호부] pickle 모듈
    
    import pickle
    
    
    
    phoneDic = {
    
        "김갑순": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***",
    
        "누구나": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***",
    
        "김갑돌": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***",
    
        "아무개": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***"
    
    }
    
    
    
    print(phoneDic)
    
    
    
    f = open("phonebook.p", 'wb')
    
    pickle.dump(phoneDic, f)
    
    f.close()
    

    소스코드

    def readPhonebook(): #피클 함수를 통해 저장한 전화번호 목록을 읽는다.
        import pickle
        f = open('phonebook.p', 'rb')
        phoneDic = pickle.load(f)
        f.close()
    def writePhonebook(): # 전화번호부 파일에 쓰기
        import pickle
        global phoneDic
        phoneDic = { "김갑순": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***", "누구나": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***", "김갑돌": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***", "아무개": "*** 개인정보보호를 위한 휴대폰번호 노출방지 ***" }
        print(phoneDic)
        f = open('phonebook.p', 'wb')
        pickle.dump(phoneDic, f)
        f.close()
    def appendPhonebook(who): #이름을 입력받아서 저장
        import pickle
        with open('phonebook.p','wb') as fw:
            pickle.dump(','+'{'+who+' : xxx-xxxx-xxxx'+'}', fw)
            print(phoneDic)
    def searchPhonebook(): #이름을 전화번호 목록 중에서 찾는다.
        import pickle
        f = open("phonebook.p", 'rb')
        phoneList = str(f.readlines())
        f.close()
        print(phoneList)
    
        phoneDic={}
        for phone in phoneList:
            nn = phone.split(' ')   # 리스트를 만든다.
            phoneDic[nn[0]] = nn[1]     # 사전에 더해준다.
    
        for key, value in phoneDic.items():
            print(key, value)
    
        while True:
            who = input("enter name :")
            number = phoneDic.get(who)
            if (number == None):
                print(who + ' : 전화번호부에 없습니다.')
                appendPhonebook(who)
                break
            elif (who == '\"\"'):
                break
            else:
                print('phone number:' + number)
    readPhonebook()
    writePhonebook()
    searchPhonebook()
    

    이렇게 작성하였는데

    Traceback (most recent call last):
      File "C:/Users/hjdyd/OneDrive/바탕 화면/data/1.py", line 47, in <module>
        searchPhonebook()
      File "C:/Users/hjdyd/OneDrive/바탕 화면/data/1.py", line 29, in searchPhonebook
        phoneDic[nn[0]] = nn[1]     # 사전에 더해준다.
    IndexError: list index out of range
    

    이런 오류가 발생하네요...

  • 프로필김형준님의 편집
    날짜2021.11.25

    파이썬 질문입니다.ㅠㅠ


    l 피클 모듈로 저장한 전화번호부 파일을 읽는다.

    l 사용자에게 이름을 입력 받는다.

    l 사용자가 ""를 입력하면, 프로그램을 종료한다.

    l 사용자가 전화번호부에 있으면, 전화번호를 출력한다.

    l 사용자가 전화번호부에 없다면, 사용자를 사전(dictionary)에 추가하고 파일로 저장한다.

    [프로그램 설계]

    다음 기능을 함수로 분리하세요.

    l def readPhonebook: # 전화번호부 읽기

    l def writePhonebook: # 전화번호부 파일에 쓰기

    l def searchPhonebook(name) # 전화번호부에서 이름을 검색한다.

    l def appendPhonebook(name) # 전화번호부에 이름을 추가한다.

    [전화번호부] pickle 모듈

    import pickle
    phoneDic = { "김갑순": "010-2222-5678", "누구나": "010-1234-1234", "김갑돌": "010-1111-1234", "아무개": "010-3333-4444" }
    print(phoneDic)
    
    f = open("phonebook.p", 'wb')
    
    pickle.dump(phoneDic, f)
    
    f.close()
    

    소스코드

    def readPhonebook(): #피클 함수를 통해 저장한 전화번호 목록을 읽는다.
        import pickle
        f = open('phonebook.p', 'rb')
        phoneDic = pickle.load(f)
        f.close()
    def writePhonebook(): # 전화번호부 파일에 쓰기
        import pickle`여기에 코드를 입력하세요`
        global phoneDic
        phoneDic = { "김갑순": "010-2222-5678", "누구나": "010-1234-1234", "김갑돌": "010-1111-1234", "아무개": "010-3333-4444" }
        print(phoneDic)
        f = open('phonebook.p', 'wb')
        pickle.dump(phoneDic, f)
        f.close()
    def appendPhonebook(who): #이름을 입력받아서 저장
        import pickle
        with open('phonebook.p','wb') as fw:
            pickle.dump(','+'{'+who+' : xxx-xxxx-xxxx'+'}', fw)
            print(phoneDic)
    def searchPhonebook(): #이름을 전화번호 목록 중에서 찾는다.
        import pickle
        with open('phonebook.p','rb') as fr:
            phoneList = str(pickle.load(fr))
    
        phoneDic={}
        for phone in phoneList:
            nn = phone.split(' ')   # 리스트를 만든다.
            phoneDic[nn[0]] = nn[1]     # 사전에 더해준다.
    
        for key, value in phoneDic.items():
            print(key, value)
    
        while True:
            who = input("enter name :")
            number = phoneDic.get(who)
            if (number == None):
                print(who + ' : 전화번호부에 없습니다.')
                appendPhonebook(who)
                break
            elif (who == '\"\"'):
                break
            else:
                print('phone number:' + number)
    
    
    이렇게 작성하였는데 Traceback (most recent call last):
      File "C:/Users/hjdyd/OneDrive/바탕 화면/data/1.py", line 47, in <module>
        searchPhonebook()
      File "C:/Users/hjdyd/OneDrive/바탕 화면/data/1.py", line 29, in searchPhonebook
        phoneDic[nn[0]] = nn[1]     # 사전에 더해준다.
    IndexError: list index out of range
    

    이런 오류가 발생하네요...

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.