20줄짜리 매우 간단한 국가 - 수도 찾는 프로그램 딕셔너리 애러입니다.

조회수 1824회
//여기에 코드를 입력하세요
#도시이름을 치면 도시와 국가이름을 반환하는 함수
def city_country():
    city = input("도시 이름을 입력해주세요 : ")
    city_country = {"서울" : "한국", "아테네" : "그리스", "파리" : "프랑스", "워싱턴" : "미국", "런던" : "영국", "코펜하겐":"덴마크",
    "베를린":"독일", "모스크바":"러시아","룩셈부르크":"룩셈부르크", "멕시코시티":"멕시코","모나코":"모나코","다카":"방글라데시","하노이":"베트남",
    "브뤼셀":"벨기에","브라질리아":"브라질","리야드":"사우디아라비아","모가디슈":"소말리아","스톡홀롬":"스웨덴","베른":"스위스","마드리드":"스페인",
    "다마스쿠스":"시리아","싱가포르":"싱가포르","두바이":"아랍에미리트","부에노스아이레스":"아르헨티나","더블린":"아일랜드","카불":"아프가니스탄",
    "알제":"알제리","캔버라":"오스트레일리아","비엔나":"오스트리아","암만":"요르단","타슈켄트":"우즈베키스탄","키예프":"우크라이나","바그다드":"이라크",
    "테헤란":"이란","예루살렘":"이스라엘","카이로":"이집트","로마":"이탈리아","뭄바이":"인도","자카르타":"인도네시아","도쿄":"일본"}

    if(city in city_country.keys()):
        print ("\""+city + "\""+"의 국가는 " + "\""+ city_country[city] +"\""+  "입니다.")
    elif(city in city_country.values()):
        print ("당신은 수도가 아니라 국가를 입력하셨네요.")
        print ("\""+city_country[city] + "\""+"의 수도는 " + "\""+ city +"\""+  "입니다.")
    else:
        print ("죄송합니다. 그 수도는 우리의 데이터 베이스에 없습니다.")

flag = 1
while(flag==1):
        city_country()

이미지

딕셔너리에 없는 key값을 참조하면 애러가 난다고 알고있는데 이 프로그램은 그것도 아닌데 왜 애러가 날까요. 심지어 if문으로 분류까지 해뒀는데.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 데모를 짜보니까 왜 헷갈리시는지 알겠네요. 에러가 나는 게 맞습니다. 왜냐면 여기서 elif를 타는 경우는 입력된 city가 도시가 아니고 국가(country) 이름인 경우잖아요. 따라서 city_country[city]로 찾으면 그런 키가 없다는 에러가 나지요.

    결국 리스트에서 값을 가지고 키를 찾아야 하는 건데 이 해묵은 문제에 대해서 python get key by values라고 검색하면 나오는 방법들 중 제일 짧은 것은 다음과 같습니다.

    # 여기서 16이란 값으로 "george" 문자열을 얻으려면?
    mydict = {'george': 16, 'amber': 19}
    # 리스트 값 배열에서 16이 갖는 '인덱스'를 가지고 리스트 키 배열에서 찾습니다.
    print mydict.keys()[mydict.values().index(16)]
    
    • 답변 감사합니다. 이것을 바탕으로 영어로 검색 더해보고 해봤는데 결국 똑같은 애러에서 벗어나지를 못했네요. 일단 중지하고 다른진도 좀 더 빼야겠습니다. 알 수 없는 사용자 2018.10.15 09:30

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

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

(ಠ_ಠ)
(ಠ‿ಠ)