📚
실습 프로젝트 (Practice) · ★★
양방향 + 복습 모드
Lv2 · 단어장 퀴즈
영-한 사전으로 랜덤 퀴즈. 영→한, 한→영, 랜덤 모드와 틀린 문제만 복습하는 모드까지 구현합니다.
dictrandom퀴즈
소요 시간
⏱ 2~3시간
난이도
📊 자료구조 활용
선수 조건
🎯 기초 7-8주차 + random
결과물
딕셔너리 양방향 활용
이 강의에서 배우는 것
- 1단어장 dict 에서 랜덤 표본을 뽑는다
- 2영→한, 한→영, 랜덤 모드를 구현한다
- 3틀린 문제만 복습 모드로 다시 푼다
프로젝트 개요
- 단어장 dict (10개 이상)
- 모드 선택: 영→한 / 한→영 / 랜덤
- 10문제 출제 후 점수 + 틀린 단어 + 복습 옵션
요구사항
- random.sample 로 중복 없이 출제
- 즉시 정답/오답 피드백
- 복습 모드: 틀린 문제만 다시
도전 과제
- 단어장 외부 파일 로드
- 정답률 단어별 누적
채점 체크리스트
- 3가지 모드
- 복습 모드
- 점수 정확
💻 예제 (examples)
실제로 실행해 결과를 확인할 수 있는 예제 코드입니다.
solution.py— 전체 동작 코드
CODE
"""단어장 퀴즈 — 양방향 + 복습 모드"""
import random
WORDS = {
"apple": "사과", "book": "책", "table": "탁자", "door": "문",
"water": "물", "fire": "불", "tree": "나무", "sky": "하늘",
"love": "사랑", "time": "시간", "house": "집", "car": "자동차",
}
def quiz(pairs, mode):
score = 0
wrong = []
for i, (en, ko) in enumerate(pairs, 1):
if mode == "en2ko":
q, a = en, ko
elif mode == "ko2en":
q, a = ko, en
else: # random
if random.random() < 0.5:
q, a = en, ko
else:
q, a = ko, en
ans = input(f"[{i}/{len(pairs)}] {q}? ").strip()
if ans == a:
print("✓ 정답")
score += 1
else:
print(f"✗ 오답 (정답: {a})")
wrong.append((q, a))
return score, wrong
def main():
print("[모드] 1.영→한 2.한→영 3.랜덤")
mode_map = {"1": "en2ko", "2": "ko2en", "3": "random"}
mode = mode_map.get(input("선택: ").strip(), "en2ko")
pairs = random.sample(list(WORDS.items()), min(10, len(WORDS)))
score, wrong = quiz(pairs, mode)
print(f"\n총점: {score} / {len(pairs)}")
if wrong and input("\n틀린 문제만 복습? (y/n): ").strip().lower() == "y":
score2, _ = quiz(wrong, mode)
print(f"복습 점수: {score2} / {len(wrong)}")
if __name__ == "__main__":
main()▶ 실행 결과
[모드] 1.영→한 2.한→영 3.랜덤
선택: 1
[1/10] apple? 사과
✓ 정답
...
총점: 8 / 10
틀린 문제만 복습? (y/n): y
[1/2] water? 물
✓ 정답
복습 점수: 2 / 2📝 과제 (exercises)
직접 풀어보고, 막힐 때 정답을 펼쳐 비교해보세요.
과제 1
프로젝트 구현
목표: 위 사양대로 직접 작성한다.
요구사항
- WORDS dict
- quiz 함수
- 복습 모드
💡 힌트
random.sample(list(WORDS.items()), 10)
입출력 예시
총점: 8 / 10채점
- · 3가지 모드
- · 복습
▶정답 코드 펼치기 / 접기
SOLUTION
# 위 solution.py 와 동일▶ 실행 결과
(예제 참고)