[Codeit - python] 단어 퀴즈

SUNGJIN KIM·2021년 9월 14일
1

codeit

목록 보기
4/18

문제

앞선 실습 과제에서 vocabulary.txt라는 파일을 만들었죠? 이 파일에는 우리가 암기하고 싶은 단어들이 정리되어 있는데요. 이번에는 이 파일의 단어들을 가지고 학생들에게 문제를 내 주는 프로그램을 만들려고 합니다.

프로그램은 콘솔에 한국어 뜻을 알려 줄 것이고, 사용자는 그에 맞는 영어 단어를 입력해야 합니다. 사용자가 입력한 영어 단어가 정답이면 "맞았습니다!"라고 출력하고, 틀리면 "아쉽습니다. 정답은 OOO입니다."가 출력되어야 합니다.

문제를 내는 순서는 vocabulary.txt에 정리된 순서입니다.

예시

고양이: cat
맞았습니다!

사과: fruit
아쉽습니다. 정답은 apple입니다.

문제 풀이

해당 문제를 풀기 위해, 주요 포인트를 정리해봤다.

  1. 파일 내 데이터는 "cat: 고양이" .. 이런식으로 저장되어있는데, 한국어뜻/영어단어 를 따로따로 분리해서 가져와야함
  2. 파일 내 데이터와 input값을 비교할 수 있어야 한다.
  3. 파일 내 단어를 전부 비교하면 종료가 가능해야 한다.

처음엔 list 형식으로 가져오려고 했으나, cat , 고양이 이런식으로 따로 가져와서 매칭시키는데 생각보다 잘 되지 않았고 이 부분을 해소하고자 이것저것 찾아본 결과 dictionary 형태로 구현 방향을 잡았다.

vocabulary = open("vocabulary.txt","r")

data = {}

for line in vocabulary:
    data = line.strip().split(":")

이 처럼 진행했을때, 각각 단어가 들어오긴 하지만 내가 원하는 dictionary 형태는 아니였다. 구글링을 했을때, dictionary 형태로 받기위해서는 사전의 패턴이 추가되어야 했다.
(원하는 형태 → "영어 단어" : "한국어 뜻" )

vocabulary = open("vocabulary.txt","r")

data = {}

for line in vocabulary:
    key_value = line.strip().split(":")
    **if len(key_value) == 2:
        data[key_value[0]] = key_value[1]**

print(data)

결과값

{'cat': ' 고양이', 'apple': ' 사과', 'church': ' 교회', 'temple': ' 절', 'wallet': ' 지갑', 'backpack': ' 책가방', 'soap': ' 비누', 'bicycle': ' 자전거'}

이 부분이 해결되고 쉽게 코드를 작성할 줄 알았으나.. 직접 dict 형태에서 key, values로 진행하려니 오류가 나거나 아래와 같은 현상이 발생했다.

(고양이 : 고양이의 정답은 고양이라니.. 부들부들)

고양이 : cat
아쉽습니다. 정답은 고양이입니다.
고양이 : 고양이
아쉽습니다. 정답은 고양이입니다.
고양이 : ^CTraceback (most recent call last):
File "/Users/woonmong/Desktop/wmportfolio/test.py", line 14, in
answer = input(f"{data[quiz[i]]} : ")
KeyboardInterrupt

고민끝에, 직접 받는 것이 아닌 각각 key, values값의 list를 받아 만들고 그 list를 불러오는 방법으로 작성하였다.

vocabulary = open("vocabulary.txt","r")

data = {}
i = 0

for line in vocabulary:
    key_value = line.strip().split(":")
    if len(key_value) == 2:
        data[key_value[0]] = key_value[1].strip()

quiz = list(data.keys())
meaning = list(data.values())

while i != len(quiz):
    answer = input(f"{meaning[i]} : ")
    if quiz[i] == answer:
        print("맞았습니다!")
        i += 1
    else:
        print(f"아쉽습니다. 정답은 {quiz[i]}입니다.")
        i += 1

일단 지금은 오류없이 정상적으로 출력했다는 사실에 만족하고 시간이 있으면 헤맸던 부분에 대해서 한번더 확인해 볼 생각이다.

profile
#QA #woonmong

1개의 댓글

comment-user-thumbnail
2021년 9월 14일

모범답안을 보니, 해당 문제는 굳이 저 형태로 받을 필요가 없어보였다고 한다..
고양고양..ㅠㅠ

답글 달기