2022. 12. 8. 23:44ㆍTrip 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퍼센트로 이해되지는 않는다. 다시 강의를 봐야할듯...
'Trip to Python' 카테고리의 다른 글
파이썬 Pong game 만들기 (0) | 2022.12.20 |
---|---|
(파이썬 OOP 이해도 높이기) 거북이 레이스 만들기 - 파이썬 좌표 개념 (0) | 2022.12.12 |
커피 자판기 프로그래밍 하기 (OOP 이해하기) (1) | 2022.12.07 |
(파이썬) 경매 프로그램 만들기 (0) | 2022.12.05 |
딕셔너리와 반복문의 활용 (0) | 2022.11.27 |