Skip to content

wlsdn66597/python-quiz-game

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

python-quiz-game-clone

내용 추가

1. 프로젝트 개요

이 프로젝트는 Python으로 구현한 콘솔 기반 퀴즈 게임입니다.

사용자는 메뉴를 통해 퀴즈를 풀고, 새로운 퀴즈를 추가하고, 등록된 퀴즈 목록과 최고 점수를 확인할 수 있습니다.

프로그램에서 사용하는 데이터는 프로젝트 루트의 state.json 파일에 저장되며, 프로그램을 종료한 뒤 다시 실행해도 추가한 퀴즈와 최고 점수가 유지됩니다.

2. 퀴즈 주제 선정 이유

이 프로젝트에서는 Python 기초를 퀴즈 주제로 선정했습니다.

변수, 자료형, 조건문, 반복문, 함수, 클래스와 같은 핵심 개념은 Python 학습의 기본이 되며, 퀴즈 형식으로 복습하기에 적합하다고 생각했습니다.

또한 직접 문제를 만들고 저장하는 기능을 통해 Python 문법뿐 아니라 프로그램 구조와 데이터 관리 방식도 함께 연습할 수 있도록 구성했습니다.

3. 과제 목표와의 연관성

이 프로젝트를 통해 다음 내용을 직접 구현하고 설명할 수 있도록 구성했습니다.

  • 변수와 자료형(int, str, bool, list, dict) 활용
  • if/elif/else를 이용한 조건 분기
  • for, while 반복문 사용
  • 함수 정의와 매개변수/반환값 활용
  • 클래스와 객체 사용
  • 파일 입출력 및 JSON 저장
  • try/except를 이용한 예외 처리
  • Git과 GitHub를 이용한 버전 관리

4. 실행 방법

실행 환경

  • 터미널 또는 VSCode

실행 명령어 python main.py

5. 기능 목록

  1. 퀴즈 풀기
  • 저장된 퀴즈를 순서대로 출제합니다.
  • 사용자가 정답 번호를 입력하면 정답/오답 여부를 출력합니다.
  • 모든 문제를 푼 뒤 총 정답 수와 점수를 출력합니다.
  • 최고 점수보다 더 높은 기록이면 최고 점수를 갱신합니다.
  1. 퀴즈 추가
  • 새로운 문제를 직접 등록할 수 있습니다.
  • 문제, 선택지 4개, 정답 번호를 입력받습니다.
  • 입력한 퀴즈는 state.json에 저장되어 다음 실행에도 유지됩니다.
  1. 퀴즈 목록
  • 현재 저장된 퀴즈 문제 목록을 확인할 수 있습니다.
  • 퀴즈가 없을 경우 안내 메시지를 출력합니다.
  1. 점수 확인
  • 현재까지 저장된 최고 점수를 출력합니다.
  • 아직 퀴즈를 풀지 않은 경우 안내 메시지를 출력합니다.
  1. 예외 처리
  • 빈 입력
  • 숫자 변환 실패 입력
  • 허용 범위 밖 숫자 입력
  • KeyboardInterrupt(Ctrl+C)
  • EOFError
  • state.json 파일이 없거나 손상된 경우

위와 같은 상황에서도 프로그램이 비정상 종료되지 않도록 처리했습니다.

6. 파일 구조

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 작업 화면 스크린샷 저장 폴더

7. 클래스 구조

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() : 프로그램 메인 실행 흐름

8. 데이터 파일 설명 (state.json)

이 프로젝트는 프로젝트 루트의 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 : 최고 정답 수

9. 입력 및 예외 처리 방식

이 프로그램은 다음과 같은 입력 오류를 처리합니다.

  • 입력 앞뒤 공백 제거 후 처리
  • 빈 입력 시 재입력 요청
  • 숫자가 아닌 입력 시 재입력 요청
  • 허용 범위를 벗어나는 숫자 입력 시 재입력 요청
  • 프로그램 실행 중 Ctrl+C 또는 EOFError 발생 시 저장 후 안전 종료
  • state.json 파일이 없는 경우 기본 퀴즈 데이터 사용
  • state.json 파일이 손상된 경우 기본 퀴즈 데이터로 복구

10. Git 작업 요약

이 프로젝트는 Git과 GitHub를 이용하여 관리했습니다.

  • git init 으로 로컬 저장소 초기화
  • 기능 단위로 의미 있는 커밋 수행
  • 브랜치 생성 및 병합 수행
  • 원격 저장소에 push
  • 별도 디렉터리에 clone
  • 기존 작업 디렉터리에서 pull 수행

11. 실행 화면 예시

실행 결과 스크린샷은 아래 경로에 저장합니다.

  • dev-env
  • menu
  • play
  • add_quiz
  • list
  • score
  • reload
  • git-log

12. 느낀 점

이 프로젝트를 통해 Python의 기본 문법뿐 아니라 클래스 설계, JSON 파일 저장, 예외 처리, Git 브랜치 및 병합 과정을 함께 연습할 수 있었습니다.

특히 단순히 코드를 작성하는 것에 그치지 않고, 프로그램을 다시 실행해도 데이터가 유지되도록 구성하면서 실제 프로그램 구조를 설계하는 경험을 할 수 있었습니다.

About

fff

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages