티스토리 뷰

영어 단어 불러오기

다른 영어단어 파일을 사용해도 상관없고, 저번 포스팅에서 제공한 단어를 사용하셔도 상관없습니다. json 파일로 만들어서 이용할 것이라는 것만 아시면 됩니다. 같은 디렉토리에 영어파일을 두고 word_test.py 파일을 만들어주세요.

파일 준비 화면단어는 toeic_voca.json, 테스트기는 word_test.py라는 이름으로 만들었습니다.


맨 처음 해야할 것은 json으로 된 영어 단어를 불러오는 일입니다. json에 관련된 메소드를 활용하려면 관련 모듈을 가지고 와야 하겠죠?


import json

with open('toeic_voca.json') as data_file:
    vocas = json.load(data_file)


with open()은 괄호 안에 있는 파일을 불러와서 열고 사용한 다음엔 자동으로 파일을 닫아줍니다. as는 뒤에 나오는 이름으로 이용하겠다는 의미입니다. 즉 "toeic_voca.json 파일을 열고 이 파일을 data_file이란 이름으로 이용하겠습니다."라고 할 수 있습니다. json.load 메소드에 넣으면 json 파일을 딕트형식으로 이용할 수 있게 만들어준다고 지난 포스팅에서 다뤘습니다. 이제 우리는 vocas라는 변수에 딕트 형식의 단어들을 저장해서 이용할 수 있습니다.


단어 확인print(vocas)를 입력하면 해당 화면이 나타납니다.


단어를 에러 없이 불러왔다면 이제 이 단어들을 이용할 일들만 남았습니다.

사용자의 입력 받기

사용자의 입력을 받아야 하는 것들이 몇개 있었습니다.

테스트기 실행 화면우리가 만들 단어 테스트기의 실행화면입니다.


우선 틀렸을 때 사용할 별명과 몇 일차를 진행할 지 정하는 숫자를 입력받으면 됩니다. 입력받을 때는 input()를 사용하면 된다고 했죠?


print("토익 단어 테스트를 시작합니다.")
slang = input("저한테 욕 한마디 해주시겠어요? : ") #정답을 못맞췄을 때 사용
st = int(input("몇 일차를 진행하시겠습니까 ?(숫자만 입력해주세요) : "))


input으로 입력받은 값은 다 문자열이 됩니다. 그래서 몇 일차인지에 대한 값을 int()를 통해 정수로 바꾼다음 st라는 변수에 저장했습니다.

단어 나누기

이제 단어를 나눠볼까요? 1200개가 조금 넘는 단어들이 들어있고, 6등분을 할 예정입니다.(6일차까지 만들어집니다.) json파일에 있는 단어를 보면 [{단어 : 뜻}, {단어 : 뜻}, {단어 : 뜻}] 형태로 만들어 놓았습니다. 왜 리스트 안에 각각을 딕트형으로 넣었을까요? 인덱스를 통해 구분하고 쉽게 나누기 위해서는 이런 형태가 좋다고 판단했습니다. 인덱스를 가지면 슬라이싱도 할 수 있고, 그러면 쉽게 원하는 만큼 분리할 수 있으니까요.

if st == 1:
    today_words = vocas[:200]
elif st == 2:
    today_words = vocas[200:400]
elif st == 3:
    today_words = vocas[400:600]
elif st == 4:
    today_words = vocas[600:800]
elif st == 5:
    today_words = vocas[800:1000]
else:
    today_words = vocas[1000:]


조건문을 통해 각 일차에 맞게 단어를 담았습니다. 슬라이싱을 할 때 시작을 표시하지 않으면 처음부터, 끝을 표시하지 않으면 끝까지 슬라이싱 된다는 것을 잊지 않으셨나요? 그래서 1일차엔 vocas[:200]이라고 적었고, 마지막에는 vocas[1000:]이라고 적었습니다.

반복문을 통해 단어 테스트기 만들기

이제는 단어의 뜻이 나오고, 그에 맞는 단어를 입력하는 등의 반복적인 행동들만 처리할 수 있으면 됩니다.


for today_word in today_words:
    word = list(today_word.keys())[0]
    meaning = list(today_word.values())[0]
    print(meaning)
    answer = input()
    if answer == word:
        print("정답입니다.")
    else:
        print("틀렸어! 정답은 {} 임".format(word), slang)


딕트.keys()는 딕트형에서 키만 가져오고, 딕트.values()는 값만 가져옵니다. 해당하는 값들을 가져오고 print문을 통해 우선 뜻만 보여주고, input()을 통해 답을 입력받으면 됩니다. 앞에서 배워온 것들이 중간중간 다 들어가있죠? 혹시 이해가 되지 않는 분들은 깃허브에서 전체 소스코드를 확인하시거나 댓글에 궁금한 점을 남겨주시면 됩니다.




다음 포스팅에서는 파이썬을 활용해서 스크래핑 하는 방법을 알아보도록 하겠습니다.



공감은 제작자에게 큰 힘이 됩니다.


댓글