본문 바로가기

교육/[Codeit] 프로그래밍 기초 in Python

실습과제. 단어퀴즈

반응형

실습과제

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

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

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

프로그램 예시 동작

고양이: cat

맞았습니다!

 

사과: fruit

아쉽습니다. 정답은 apple입니다.

 

교회: church

맞았습니다!

 

절: tample

아쉽습니다. 정답은 temple입니다.

 

지갑: wallet

맞았습니다!

 

책가방: bag

아쉽습니다. 정답은 backpack입니다.

 

비누: soap

맞았습니다!

 

자전거: bycicle

아쉽습니다. 정답은 bicycle입니다.

 

 

셀프 채점

다음 항목들이 제대로 구현되었는지 확인해 보세요!

vocabulary.txt 파일에 있는 단어를 하나씩 순서대로 불러와서 퀴즈를 낸다.

정답을 맞추면 "맞았습니다!", 틀리면 "아쉽습니다. 정답은 *입니다"가 출력된다.

vocabulary.txt 파일에 있는 단어 수가 달라져도 코드가 잘 작동한다.

 

힌트5/5

 

과제 해설

영어 단어와 한국어 뜻 받아오기

파일을 읽기 위해서는 먼저 파일을 열어야겠죠?

 

with open('vocabulary.txt', 'r') as f:

 

이렇게 하면 vocabulary.txt라는 파일을 열고, 그 파일에 읽을 수 있습니다.

이제 파일을 한 줄씩 순서대로 읽어야 하는데요. for문을 사용하면 되겠죠?

 

for line in f:

 

for문의 수행 부분에는 어떤 코드가 들어가야 할까요?

먼저 각 줄(line)의 영어 단어와 한국어 뜻을 각각 어떻게 받아올 수 있을지 생각해 봅시다.

두 단계를 거쳐 할 수 있는데요.

  1. strip을 이용해서 line에서 "\n"을 없앤다.
  2. split을 이용해서 영어 단어와 한국어 뜻 나눈다.

코드로 작성하면 이렇습니다.

 

data = line.strip().split(": ")

 

그러면 data 리스트의 0번 인덱스에는 영어 단어가 들어가고, 1번 인덱스에는 한국어 뜻이 들어가는 거죠. 깔끔한 코드를 위해, 각각 변수에 지정하겠습니다.

 

english_word, korean_word = data[0], data[1]

 

 

문제 내기

이제 사용자에게 문제를 내고, 답을 입력받으면 됩니다.

 

guess = input("{}: ".format(korean_word))

 

그 후에는 답이 맞았는지 틀렸는지 알려 주는 코드만 쓰면 되는데요. 이렇게 할 수 있습니다.

 

if guess == english_word:
     print("정답입니다!\n")
else:
     print("아쉽습니다. 정답은 {}입니다.\n".format(english_word))

 

 

모범 답안

with open('vocabulary.txt', 'r') as f:
     for line in f:
          data = line.strip().split(": ")
          english_word, korean_word = data[0], data[1]

          # 유저 입력값 받기
          guess = input("{}: ".format(korean_word))

          # 정답 확인하기
          if guess == english_word:
               print("정답입니다!\n")
          else:
               print("아쉽습니다. 정답은 {}입니다.\n".format(english_word))

728x90
반응형