[Codeit - python] 단어장 만들기

SUNGJIN KIM·2021년 9월 11일
2

codeit

목록 보기
3/18

문제

영어 강사 Coy는 학생들의 단어 암기를 위해 단어장 프로그램을 만들려고 합니다.

이 프로그램은 콘솔로 영어 단어와 한국어 뜻을 받고, vocabulary.txt라는 새로운 텍스트 파일에 단어와 뜻을 정리하는데요. 사용자가 새로운 단어와 뜻을 입력할 때마다 vocabulary.txt에 작성되는 것입니다.

사용자는 반복적으로 단어와 뜻을 입력하는데, 단어나 뜻으로 q를 입력하는 순간 프로그램은 즉시 종료됩니다. 사용자가 q를 입력하고 나면 파일은 더 이상 바뀌지 않아야 합니다.

문제 풀이

while True:
    voca = input("영어 단어를 입력하세요 : ")
    if voca == "q":
        break
    voca_meaning = input("한국어 뜻을 입력하세요 : ")
    if voca_meaning == "q":
        break
    vocabulary = open("vocabulary.txt","a")
    vocabulary.write(f"{voca} : {voca_meaning}\n")
    

처음 이 문제에 대한 코드를 작성하고 실행을 했을때, 2가지가 성립이 되지 않았다.

  1. 파일 내에는 영어단어 : 한국어 뜻 만 저장되어야 하는데, 소스코드가 전부 저장이 되고 있었다.
  2. 영어단어 입력란에 q를 입력해도 종료가 되지 않았다.

1번의 경우에는 vocabulary = open("vocabulary.txt", "a") 부분을 while문 내에 넣어주니 해결이 되었다.

2번의 경우에는 정확하게 어떤 문제였냐면, 영어 단어에 "q"를 입력 시, 바로 종료가 되어야 하는데 한국어 뜻을 한번 더 입력하고 종료가 되었다.

곰곰히 소스코드를 살펴보니, while 문의 조건으로 "voca != "q"" 의 조건을 주었는데, 이는 전체 코드가 실행되기 전까지는 while 문이 종료되지 않게 되어있는 것이였고, 이 부분을 현재와 같이 수정을 하여 정답에 도달하였다.

해답을 보면서 내 소스코드를 보니 한 가지 다른 점이 있었는데, while문 밖에서 파일을 열기/새로 생성하는 것이였다. 처음에 1번 문제를 해결하려고 안으로 넣었는데 2번을 해결하면서부터 while문 안이든, 밖이든 결과값에 변화가 없는 것을 확인했다.

그럼 밖에서 선언하는 것과, 안에서 선언하는 것의 차이는 무엇일까?
일단 생각해봤을때, 밖에서 호출하면 1번만 호출해도 되지만 while 문 내에 있을 경우에는, 입력을 받을때마다 여러번 호출해야한다는 점이 있다.

결론으로는, 밖에서 선언하는 것이 더 좋은 코드라고 생각되어 아래와 같이 소스코드를 수정하였다. 이렇게 진행해도 결과값은 동일하게 나오는 것을 확인했다. :)

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

while True:
    voca = input("영어 단어를 입력하세요 : ")
    if voca == "q":
        break
    voca_meaning = input("한국어 뜻을 입력하세요 : ")
    if voca_meaning == "q":
        break
    vocabulary.write(f"{voca} : {voca_meaning}\n")
    
profile
#QA #woonmong

0개의 댓글