(파이썬 OOP 이해도 높이기 )퀴즈 프로그램 만들기

2022. 12. 8. 23:44Trip to Python

오늘의 복습 내용은 퀴즈 프로그램을 만드는 것이다. 문제와 정답이 담긴 데이터를 활용하여 반복적으로 문제를 푸는 프로그램인데 객체에 익숙해지도록 한 번더 과제를 준 것 같다. 정말 헷갈리는 건 객체에 메소드 혹은 속성 이름을 쓰는 게 가끔 뭐라고 써야하는지 모르겠는데 참 어렵다.

 

1. 데이터 확인

- 굳이 코드로 적지 않아도 될 것 같다. 데이터는 question_data라는 변수에 리스트 형식으로 담겨 있고 리스트 안에 12개의 문제와 답이 담긴 딕셔너리가 있다.

 

2. 데이터 끌어오기(question_model.py)

class Question:
	def __init__(self, q_text, q_answer)
    self.text = q_text
    self.answer = q_answer

- 각 개체에 접근할 수 있는 함수 모델링

 

3. main.py에 데이터 끌어오기

from data import question_data
from question_model import Question

question_bank = []

for question in question_data:
    question_text = question["text"]
    question_answer = question["answer"]
    new_question = Question(question_text, question_answer)
    question_bank.append(new_question)

- 이전에 만든 class를 활용하여 각 개체를 새로운 리스트에 추가해 추후 편하게 활용하도록 만듬

 

4. 퀴즈 프로세스에 필요한 함수 구성 1차 (quiz_brain.py) 

class QuizBrain:

    def __init__(self, q_list):
        self.question_number = 0
        self.question_list = q_list
        
    def next_question(self):
        current_question = self.question_list[self.question_number]
        self.question_number += 1
        input(f"Q.{self.question_number}: {current_question.text} (True/False): ")

- Quiz 프로세스에서 question_bank 리스트를 활용하기 위해 속성으로 추가하고 숫자 번호도 추가함. 다음으로 문제를 맞추고 다음 문제로 넘어가는 프로세스를 구성. 

 

5.  main.py에서 반복 구문을 통해 계속해서 다음 문제로 자동으로 넘어가도록 함

from question_model import Question
from data import question_data
from quiz_brain import QuizBrain

question_bank = []

for question in question_data:
    question_text = question["question"]
    question_answer = question["correct_answer"]
    new_question = Question(question_text, question_answer)
    question_bank.append(new_question)

quiz = QuizBrain(question_bank)

next_question = True

while next_question:
	quiz.next_question()

 - quiz 객체를 만들어주고 while 구문에 넣어주면 된다.

 

6. 정답 판별 및 반복 구문 종료를 위함 함수 구성

class QuizBrain:

    def __init__(self, q_list):
        self.question_number = 0
        self.question_list = q_list
        self.score = 0

    def still_has_question(self):
        if self.question_number < len(self.question_list):
            return True
        else:
            return False

    def next_question(self):
        current_question = self.question_list[self.question_number]
        self.question_number += 1
        user_answer = input(f"Q.{self.question_number}: {current_question.text} (True/False): ")
        self.check_answer(user_answer, current_question.answer)

    def check_answer(self, user_answer, correct_answer):
        if user_answer.lower() == correct_answer.lower():
            print("You got it right!")
            self.score += 1
        else:
            print("That's wrong.")
        print(f"The correct answer was: {correct_answer}.")
        print(f"Your current score is: {self.score}/{self.question_number}.")
        print("\n")

- 실상 내가 check_answer까지는 짠다고 쳐도 next_question 함수에 넣어서 활욯하는 걸 할 수 있을지 모르겠다. 그리고 2번째 함수는 return self.question_number < len(self.question_list)로 바꿀 수 있으나 파이참에서 안되는지 모르겠다.

 

7. main.py에 정답 판별 및 종료 함수 적용

from question_model import Question
from data import question_data
from quiz_brain import QuizBrain

question_bank = []

for question in question_data:
    question_text = question["question"]
    question_answer = question["correct_answer"]
    new_question = Question(question_text, question_answer)
    question_bank.append(new_question)

quiz = QuizBrain(question_bank)

while quiz.still_has_question():
    quiz.next_question()

print("You've completed the quiz")
print(f"Your final score was: {quiz.score}/{quiz.question_number}")

- 정말 뇌가 깨지는 줄 알았던 객체 공부였다. 사실 아직 __init__ 속성을 만들어서 활용하는게 100퍼센트로 이해되지는 않는다. 다시 강의를 봐야할듯...