Python/알고리즘

42888 오픈채팅방 / 오류 : TypeError: 'dict' object is not callable

vss121 2022. 7. 16. 20:44

중간에

TypeError: 'dict' object is not callable

 

이런 오류가 떴다

 
answer.append(name[rr[1]]+printer[rr[0]])를 
answer.append(name[rr[1]]+printer(rr[0])) 라고 써서 발생한 오류였다.
 
dictionary의 키를 이용해 값을 얻을 때는[ ]를  ( ) 로 실수로 쓰지 말자!!!!

 

 

 

 

# 내 풀이

def solution(record):
    #딕셔너리에 이름 처리하기
    name={}
    for i in range(len(record)):
        if record[i][0] == 'L':
            continue
        id_name = record[i].split()
        name[id_name[1]] = id_name[2]

    #answer(리스트)에 출력 메세지 넣기
    answer = []
    for i in range(len(record)):
        if record[i][0] == 'E':
            answer.append(f"{name[record[i].split()[1]]}님이 들어왔습니다.")
        elif record[i][0] == 'L':
            answer.append(f"{name[record[i].split()[1]]}님이 나갔습니다.")

    return answer

#record = ["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"]
#print(solution(record))


# 다른 풀이

def solution(record):
    answer=[]
    name={}
    printer={'Enter':'님이 들어왔습니다.', 'Leave':'님이 나갔습니다.'}
    for r in record:
        rr = r.split(' ')
        if rr[0] in ['Enter', 'Change']:    #이름 update
            name[rr[1]] = rr[2]
    
    for r in record:
        rr = r.split(' ')
        if rr[0] != 'Change':
            answer.append(name[rr[1]]+printer[rr[0]])

    return answer

record = ["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"]
print(solution(record))

 

 

 

 

 

교훈

1. 변수 = list[인덱스].split() 사용법

"Enter uid1234 Muzi"를 어떻게 넣을까에 대해 

record = [" ... ", "...", " ... "]에서

id_name = record[인덱스].split() 을 하면 

id_name = ["Enter", "uid1234", "Muzi"]가 된다. 여기에서 

id_name[0], id_name[1], id_name[2]을 이용해보자.

 

2. ~~~~ in [' ... ', ' ...'] 로 해당하는게 있는지 확인

 

 

 
 
 
 

'Python > 알고리즘' 카테고리의 다른 글

정올 1291  (0) 2022.07.26
[프로그래머스] 60057 문자열 압축  (0) 2022.07.10
[백준] 11478 / 18247  (0) 2022.07.06
[백준] 1225 이상한 곱셈  (0) 2022.07.06
[백준] 5639 이진 검색 트리 (미완)  (0) 2022.07.03