파이썬 함수, 딕셔너리, 반복문 등 사용하는 문제 질문입니다.

조회수 832회
홍길동 = list()
홍길은 = list()
홍길금 = list()
book = {1:"도레미제라블",2:"위대한 소츠비", 3:"어른 왕자", 4:"아이와 산", 5:"곤충 농장",
        6:"춘추전국시대", 7:"분노의 사과", 8:"강철북", 9:"첫 번째 잎새", 10:"그리고 아무 말이나 했다"}
borrower = {}

def borrow():
    cnt = 0
    book_list = []
    while cnt !=3:
        thisbook = input("빌릴 책의 코드:")
        if thisbook =="q":
            break
        book_list.append(book[int(thisbook)])
        cnt = cnt + 1
    return book_list

while True:
    a = input("회원 이름을 입력하세요.:")
    if a == 'q':
        break
    borrower[a] = borrow()

print("현재 대출 자 목록")
print(borrower)

이 코드를 통해 대출자 목록이

{'홍길동':['도레미제라블','어른왕자']. '홍길은':['춘추전국시대
, '분노의 사과', '위대한 소츠비']}

와 같이 출력됩니다. 이코드를 수정하여 만약 같은 책의 코드가 두번 입력되면 '이미 대출된 책입니다'를 출력하고 싶습니다. 따라서 input으로 빌릴 책 코드를 입력받고 입력받은 코드를 del을 통해 book 딕셔너리에서 삭제하고 그 다음 다시 입력받도록 수정하고 싶습니다. 다시 입력 받을 때 book 딕셔너리에 없는 key를 입력받았을 때 '이미 대출된 책입니다'를 출력하는 것입니다. 그래서, 중간에 def 부분을

def borrow():
    cnt = 0
    book_list = []
    while cnt !=3:
        thisbook = input("빌릴 책의 코드:")
        del book[thisbook]                 # 제가 삽입한 부분--------------
        if thisbook not in book:
            print("대출된 책입니다.")        #--------------------
        if thisbook =="q":
            break
        book_list.append(book[int(thisbook)])
        cnt = cnt + 1
    return book_list

이렇게 바꾸니 에러가 뜹니다. 사실 잘못된 코드라는 것은 감이 오는데 어찌해야할지 모르겠네요.. 도움 구해봅니다.

  • del book[thisbook]에서 thisbook 키가 그 값과 함께 삭제되었는데, 그 다음 if문에서 존재하지 않는 thisbook이 사용된 게 문제 아닐까요? 알 수 없는 사용자 2020.6.1 20:41
  • 네 아무래도 그런 것 같아요. 어떻게 해야 원하는 결과물을 얻을 수 있을지 고민이네요 알 수 없는 사용자 2020.6.1 20:48

1 답변

  • 홍길동 = list()
    홍길은 = list()
    홍길금 = list()
    book = {1:["도레미제라블",1],2:["위대한 소츠비",1], 3:["어른 왕자",1], 4:["아이와 산",1], 5:["곤충 농장",1],
            6:["춘추전국시대",1],7:["분노의 사과",1], 8:["강철북",1], 9:["첫 번째 잎새",1], 10:["그리고 아무 말이나 했다",1]}
    borrower = {}
    
    def borrow():
        cnt = 0
        book_list = []
        while cnt !=3:
            thisbook = input("빌릴 책의 코드:")
            if thisbook =="q":
                break
            else:
                if book[int(thisbook)][1] != 0:
                    book_list.append(book[int(thisbook)][0])
                    book[int(thisbook)][1] -= 1
                    cnt = cnt + 1
                else:
                    print("해당 책이 없서용 다시 입력해주세용")
        return book_list
    #이하 생략
    

    이런 방식으로 하면 좋을거 같은데용

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)