□ 제목 : 중학 영어 단어 암기 파이썬 프로그램 (Flash Card V1.0) 무료 공유
□ 개발자 : 알고리즘 자체 개발 및 ChatGPT 코딩
□ 단어 : 중학교 필수 영단어 1,800개 (구글링으로 수집)
□ 파일 형식 : EXE, TXT (악성 코드 및 광고 없음)
□ 파일 다운로드 : Flash_Card_V1.exe
□ 파일 다운로드 : Flash_Card_words.txt
※ 주의 : EXE 실행 파일과 TXT 파일은 반드시 같은 폴더 안에 두고 실행해야 합니다.
사랑하는 딸이 중학교에 올라가서 영어 공부로 스트레스를 받는 것 같아서 뭔가 도움이 될만한 것이 없나 고민하던 중에 문득 떠오른 아이디어 하나로 개발하게 되었습니다. 파이썬으로 개발했고, 회사를 다니면서 직접 개발하면 이틀 정도 걸릴 것 같았는데 역시 ChatGPT에게 제가 고안한 알고리즘을 알려주고 코딩을 시켜보니 반나절만에 완성했습니다. 이젠 정말 알고리즘만 제대로 구상하기만 하면 자질구레한 코딩은 직접 하지 않아도 될 듯 합니다.
단어는 일단 중학생 수준에서 필수 단어라고 생각되는 단어만 1,800개를 구글에서 검색으로 찾아 정리했습니다. 텍스트 파일을 함께 배포 드리니 자유롭게 편집하시면 됩니다. 단어와 뜻 사이에는 '^^^' 기호로 분리했으니 새롭게 추가하시거나 편집하실 때 참고하시기 바랍니다.
제가 생각한 알고리즘은 아래를 참고하시면 됩니다. 많은 분들께 도움이 되길 바라는 마음에서 무료로 공개하니 마음껏 사용하시고, 자유롭게 배포하셔도 되지만, 상업적인 용도로만 사용하지 마시기를 바랍니다. 궁금하신 점이 있으시면 언제든지 댓글로 남겨주시면 시간 나는 대로 답변 드리겠습니다.
1. 텍스트 파일에 영어 단어와 한국어 번역이 ‘^^^’ 표시로 연결되어 있고 총 1,800개의 단어가 있다.
2. 프로그램을 실행하면 대화창이 출력되고 랜덤으로 영어 단어를 보여주고 정답 버튼을 누르면 영어 단어의 ‘^^^’ 뒤에 있는 한국어 번역을 보여준다.
3. 자신이 암기했다고 생각하면 ‘암기 완료’ 버튼을 누르고, 좀 더 공부해야 한다고 생각하면 ‘다시 도전’ 버튼을 누를 수 있다.
4. 단어장은 세 개의 그룹으로 계속해서 업데이트되어야 한다. 아직 한 번도 보여지지 않은 단어들의 그룹, ‘다시 도전’으로 분류된 그룹, ‘암기 완료’로 분류된 그룹으로 저장되어서 프로그램을 다시 실행해도 그룹은 유지된다. 텍스트 문서에는 크게 3가지의 그룹으로 구성되어 있다. 그룹은 [new], [practice], [complete]으로 구성되어 있고 초기화된 상태는 [new]에만 단어들이 들어있고, 나머지 두 개의 그룹에는 어떤 것도 추가되어 있지 않다. 처음 프로그램을 실행하면 3개의 그룹의 단어들을 각각의 변수들에 리스트로 가져온 후에 [new] 그룹에서 랜덤으로 추출해서 보여주고, 사용자가 ‘다시 도전’ 버튼을 누르면 단어는 [practice] 그룹으로 보내어지고, ‘암기 완료’ 버튼을 누르면 단어는 [complete] 그룹으로 보내져서 각각의 변수에 저장된다. ‘다시 도전’ 또는 ‘암기 완료’ 버튼을 누르면 다음 단어를 출력해야 하는데 이때 [practice] 그룹에 단어가 비어있다면 [new] 그룹에서만 단어를 랜덤으로 추출하고, [practice] 그룹에 단어가 비어있지 않다면 [practice] 그룹의 단어들 전체와 [practice] 그룹의 단어들의 수와 같은 수를 [new] 그룹에서 랜덤으로 추출하여 [practice] 그룹의 단어들과 [new] 그룹 단어들을 합친 뒤에 랜덤으로 다시 추출해서 출력하도록 한다. [practice] 그룹의 단어들도 출력한 뒤 사용자가 ‘암기 완료’ 버튼을 누르면 [complete] 그룹으로 이동한다. 사용자가 ‘공부 종료’ 버튼을 누르면 현재까지 저장해 둔 3개의 그룹의 변수들을 텍스트 문서에 [new], [practice], [complete]에 맞춰서 다시 작성 후 저장한다.
5. 랜덤으로 영어 단어를 보여줄 때, 아직 한 번도 보여지지 않은 그룹과 ‘다시 도전’ 그룹의 단어들을 같은 비율로 가져온 뒤 랜덤으로 추출한다. 예를 들면, ‘다시 도전’ 그룹의 단어가 10개인 경우, 아직 한 번도 보여지지 않은 그룹의 단어 10개를 랜덤으로 추출한 후 20개에서 랜덤으로 추출하여 화면에 출력한다.
6. 대화창의 구성은 영어 단어를 보여주는 화면, 정답을 출력하는 화면, 정답 버튼, ‘암기 완료’ 버튼, ‘다시 도전’ 버튼, ‘초기화’ 버튼, ‘공부 종료’ 버튼으로 구성된다. ‘초기화’ 버튼을 누르면 모든 단어들이 [new] 그룹으로 이동되고 [practice]와 [complete] 그룹은 비어있게 된다. 그러면서 동시에 [new] 그룹의 단어 중 하나를 랜덤으로 추출해서 출력한다.
'정답' = 'Correct Answer'
'암기 완료' = 'Memorization Complete'
'다시 도전' = 'Challenge Again'
'초기화' = 'Reset'
'공부 종료' = 'End Study'
import tkinter as tk
import random
import codecs
import webbrowser
class VocabStudy:
def __init__(self, master):
self.master = master
self.master.geometry('400x300') # Adjust size
self.master.title('Flash Card Program')
self.words = {'[new]': [], '[practice]': [], '[complete]': []}
self.current_word = None
self.word_var = tk.StringVar()
self.answer_var = tk.StringVar()
# Increase font size and adjust label sizes
self.word_label = tk.Label(master, textvariable=self.word_var, width=30, height=3, wraplength=300, font=("Helvetica", 18))
self.answer_label = tk.Label(master, textvariable=self.answer_var, width=30, height=3, wraplength=300, font=("Helvetica", 18))
self.word_label.pack()
self.answer_label.pack()
self.get_words_from_file()
button_frame = tk.Frame(self.master)
button_frame.pack()
tk.Button(button_frame, text='Correct Answer', command=self.show_answer).grid(row=0, column=0, padx=10, pady=10)
tk.Button(button_frame, text='Memorization Complete', command=self.memorization_complete).grid(row=0, column=1, padx=10, pady=10)
tk.Button(button_frame,text='Challenge Again', command=self.challenge_again).grid(row=0, column=2, padx=10, pady=10)
tk.Button(button_frame, text='Reset', command=self.reset).grid(row=1, column=0, padx=10, pady=10)
tk.Button(button_frame, text='End Study', command=self.end_study).grid(row=1, column=1, padx=10, pady=10)
# Website link label
link_label = tk.Label(master, text="studyingengineer.tistory.com", fg="blue", cursor="hand2")
link_label.pack()
link_label.bind("<Button-1>", lambda e: webbrowser.open_new("http://studyingengineer.tistory.com/"))
self.show_word()
def get_words_from_file(self):
with codecs.open('Flash_Card_words.txt', 'r', 'utf-8') as f:
lines = f.readlines()
group = None
for line in lines:
line = line.strip()
if line in self.words.keys():
group = line
elif line != '':
self.words[group].append(line.split('^^^')) # type: ignore
def show_word(self):
if not self.words['[new]'] and not self.words['[practice]']:
self.word_var.set('No more words to study')
return
if not self.words['[practice]']:
self.current_word = random.choice(self.words['[new]'])
else:
practice_len = len(self.words['[practice]'])
combined_list = self.words['[new]'][:practice_len] + self.words['[practice]']
self.current_word = random.choice(combined_list)
self.word_var.set(self.current_word[0])
self.answer_var.set('')
def show_answer(self):
self.answer_var.set(self.current_word[1])
def memorization_complete(self):
if self.current_word in self.words['[new]']:
self.words['[new]'].remove(self.current_word)
self.words['[complete]'].append(self.current_word)
elif self.current_word in self.words['[practice]']:
self.words['[practice]'].remove(self.current_word)
self.words['[complete]'].append(self.current_word)
self.show_word()
def challenge_again(self):
if self.current_word in self.words['[new]']:
self.words['[new]'].remove(self.current_word)
self.words['[practice]'].append(self.current_word)
self.show_word()
def reset(self):
self.words['[new]'] += self.words['[practice]'] + self.words['[complete]']
self.words['[practice]'] = []
self.words['[complete]'] = []
self.show_word()
def end_study(self):
with codecs.open('words.txt', 'w', 'utf-8') as f:
for group, word_list in self.words.items():
f.write(group + '\n')
for word in word_list:
f.write('^^^'.join(word) + '\n')
self.master.quit()
if __name__ == '__main__':
root = tk.Tk()
vocab_study = VocabStudy(root)
root.mainloop()
숫자 야구 버전1 파이썬 게임 무료 다운로드: 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규칙 등 공개 (tistory.com)
숫자 야구 버전2 파이썬 게임 무료 다운로드: 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규칙 등 공개 (tistory.com)
숫자 야구 버전3 파이썬 게임 무료 다운로드: 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규칙 등 공개 (tistory.com)
Wordle (워들) 파이썬 게임 무료 공개 (광고 없음): 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규칙 등 공개 (tistory.com)
[Python] 구구단 출력하기 파이썬 프로그램 예제 (tistory.com)
숫자 야구 버전3 파이썬 게임 무료 다운로드: 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규칙 등 공개 (0) | 2023.05.28 |
---|---|
숫자 야구 버전2 파이썬 게임 무료 다운로드: 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규칙 등 공개 (0) | 2023.05.28 |
숫자 야구 버전1 파이썬 게임 무료 다운로드: 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규칙 등 공개 (0) | 2023.05.28 |
Wordle (워들) 파이썬 게임 무료 공개 (광고 없음): 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규칙 등 공개 (1) | 2023.05.14 |
[Python] 자연수의 약수 구하기 파이썬 프로그램 예제 (0) | 2023.04.13 |
댓글 영역