내용 추가
이 프로젝트는 Python으로 구현한 콘솔 기반 퀴즈 게임입니다.
사용자는 메뉴를 통해 퀴즈를 풀고, 새로운 퀴즈를 추가하고, 등록된 퀴즈 목록과 최고 점수를 확인할 수 있습니다.
프로그램에서 사용하는 데이터는 프로젝트 루트의 state.json 파일에 저장되며, 프로그램을 종료한 뒤 다시 실행해도 추가한 퀴즈와 최고 점수가 유지됩니다.
이 프로젝트에서는 Python 기초를 퀴즈 주제로 선정했습니다.
변수, 자료형, 조건문, 반복문, 함수, 클래스와 같은 핵심 개념은 Python 학습의 기본이 되며, 퀴즈 형식으로 복습하기에 적합하다고 생각했습니다.
또한 직접 문제를 만들고 저장하는 기능을 통해 Python 문법뿐 아니라 프로그램 구조와 데이터 관리 방식도 함께 연습할 수 있도록 구성했습니다.
이 프로젝트를 통해 다음 내용을 직접 구현하고 설명할 수 있도록 구성했습니다.
- 변수와 자료형(
int,str,bool,list,dict) 활용 if/elif/else를 이용한 조건 분기for,while반복문 사용- 함수 정의와 매개변수/반환값 활용
- 클래스와 객체 사용
- 파일 입출력 및 JSON 저장
try/except를 이용한 예외 처리- Git과 GitHub를 이용한 버전 관리
실행 환경
- 터미널 또는 VSCode
실행 명령어 python main.py
- 퀴즈 풀기
- 저장된 퀴즈를 순서대로 출제합니다.
- 사용자가 정답 번호를 입력하면 정답/오답 여부를 출력합니다.
- 모든 문제를 푼 뒤 총 정답 수와 점수를 출력합니다.
- 최고 점수보다 더 높은 기록이면 최고 점수를 갱신합니다.
- 퀴즈 추가
- 새로운 문제를 직접 등록할 수 있습니다.
- 문제, 선택지 4개, 정답 번호를 입력받습니다.
- 입력한 퀴즈는
state.json에 저장되어 다음 실행에도 유지됩니다.
- 퀴즈 목록
- 현재 저장된 퀴즈 문제 목록을 확인할 수 있습니다.
- 퀴즈가 없을 경우 안내 메시지를 출력합니다.
- 점수 확인
- 현재까지 저장된 최고 점수를 출력합니다.
- 아직 퀴즈를 풀지 않은 경우 안내 메시지를 출력합니다.
- 예외 처리
- 빈 입력
- 숫자 변환 실패 입력
- 허용 범위 밖 숫자 입력
KeyboardInterrupt(Ctrl+C)EOFErrorstate.json파일이 없거나 손상된 경우
위와 같은 상황에서도 프로그램이 비정상 종료되지 않도록 처리했습니다.
python-quiz-game/
├─ main.py
├─ README.md
├─ .gitignore
├─ state.json
└─ docs/
└─ screenshots/
├─ dev-env.png
├─ menu.png
├─ play.png
├─ add_quiz.png
├─ list.png
├─ score.png
├─ reload.png
├─ git-log.png
├─ branch-merge.png
└─ clone-pull.png
파일 설명
main.py: 프로그램의 전체 코드가 들어 있는 메인 파일README.md: 프로젝트 설명 문서.gitignore: Git 추적에서 제외할 파일 목록state.json: 퀴즈 데이터와 최고 점수를 저장하는 파일docs/screenshots/: 실행 결과 및 Git 작업 화면 스크린샷 저장 폴더
Quiz 클래스 개별 퀴즈 1개를 표현하는 클래스입니다.
속성
question: 문제choices: 선택지 4개answer: 정답 번호(1~4)
메서드
display(): 문제와 선택지 출력is_correct(): 정답 여부 확인to_dict(): JSON 저장용 딕셔너리 변환from_dict(): JSON 데이터로부터Quiz객체 생성
QuizGame 클래스 게임 전체를 관리하는 클래스입니다.
속성
quizzes: 퀴즈 목록best_score: 최고 점수state_file: 저장 파일 경로
메서드
show_menu(): 메뉴 출력get_number_input(): 숫자 입력 검증get_non_empty_input(): 빈 문자열 방지 입력 처리load_state(): 저장 파일 불러오기save_state(): 저장 파일 저장하기play_quiz(): 퀴즈 진행add_quiz(): 퀴즈 추가show_quiz_list(): 퀴즈 목록 출력show_best_score(): 최고 점수 출력run(): 프로그램 메인 실행 흐름
이 프로젝트는 프로젝트 루트의 state.json 파일을 사용하여 데이터를 저장합니다.
파일 인코딩은 UTF-8이며, 퀴즈 목록과 최고 점수를 JSON 형식으로 저장합니다.
역할
- 프로그램을 종료한 뒤에도 퀴즈 데이터를 유지
- 최고 점수 기록 유지
- 프로그램 재실행 시 이전 상태 복원
예시 스키마
{
"quizzes": [
{
"question":"Python의 창시자는 누구인가요?",
"choices": [
"Guido van Rossum",
"Linus Torvalds",
"James Gosling",
"Dennis Ritchie"
],
"answer":1
}
],
"best_score":3
}
필드 설명
quizzes: 저장된 퀴즈 목록question: 문제 내용choices: 4개의 선택지 리스트answer: 정답 번호best_score: 최고 정답 수
이 프로그램은 다음과 같은 입력 오류를 처리합니다.
- 입력 앞뒤 공백 제거 후 처리
- 빈 입력 시 재입력 요청
- 숫자가 아닌 입력 시 재입력 요청
- 허용 범위를 벗어나는 숫자 입력 시 재입력 요청
- 프로그램 실행 중
Ctrl+C또는EOFError발생 시 저장 후 안전 종료 state.json파일이 없는 경우 기본 퀴즈 데이터 사용state.json파일이 손상된 경우 기본 퀴즈 데이터로 복구
이 프로젝트는 Git과 GitHub를 이용하여 관리했습니다.
git init으로 로컬 저장소 초기화- 기능 단위로 의미 있는 커밋 수행
- 브랜치 생성 및 병합 수행
- 원격 저장소에
push - 별도 디렉터리에
clone - 기존 작업 디렉터리에서
pull수행
실행 결과 스크린샷은 아래 경로에 저장합니다.
이 프로젝트를 통해 Python의 기본 문법뿐 아니라 클래스 설계, JSON 파일 저장, 예외 처리, Git 브랜치 및 병합 과정을 함께 연습할 수 있었습니다.
특히 단순히 코드를 작성하는 것에 그치지 않고, 프로그램을 다시 실행해도 데이터가 유지되도록 구성하면서 실제 프로그램 구조를 설계하는 경험을 할 수 있었습니다.







