20줄짜리 매우 간단한 국가 - 수도 찾는 프로그램 딕셔너리 애러입니다.
조회수 1826회
//여기에 코드를 입력하세요
#도시이름을 치면 도시와 국가이름을 반환하는 함수
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
댓글 입력