파이썬 - 17일차 - 퀴즈 프로젝트와 OOP의 장점

Shy·2023년 2월 24일

Python

목록 보기
5/9

클래스


파이썬에서 클래스를 만드는 법

Class is a Blueprint.

class User:
	pass # 공백으로 두고 싶을 때, 그냥 넘어가는 역할을 한다(그냥 빈칸으로 두면 오류가 남.)

user_1 = User()
  • 클래스 명은 대문자여야 한다.



속성, 클래스 생성자, init()함수 활용

class = User:
	pass
user_1 = User()
user_1.id = "001"
user_1.username = "angela"

위와 같이 만들 수 있지만, 객체가 많을 때 보다 간편하게 만들 수 있는 방법도 존재한다.

시작 정보들을 청사진의 일부로 사용. (initialize)

  • 변수나 카운터의 시작 값을 미리 지정할 수 있다
  • 생성자를 만들려면 init 함수를 사용해야 한다.
  • def_ _init__(self): 로 생성한다.
#예시, 좌석을 입력받는 Car 클래스 생성 후, 속성을 추가
class Car:
	def __init__(self, seats):
    	self.seats = seats
my_car = Car(5) # my_car.seats = 5
class User(self):

	def __init__(self, user_id, username):
    	self.id = user_id
        self.username = username
        self.followers = 0 # 파라미터를 받지 않는 값

user_1 = User("001", "angela")
user_2 = User("002", "jack")

클래스에 생성자를 추가하면, 이 클래스에서 새로운 객체가 생성될 때 마다 파라미터의 갯수만큼 데이터를 전달해 주어야 한다.
만약 입력하지 않으면 에러가 발생한다.



클래스에 메소드 추가

속성: 객체가 가지고 있는 것들
메소드: 객체가 하는 것들

  • 예시
class Car:
	def enter_race_mode():
    	self.seats = 2
my_car.enter_race_mode()
class User(self):

	def __init__(self, user_id, username):
    	self.id = user_id
        self.username = username
        self.followers = 0 # 파라미터를 받지 않는 값
        self.following = 0
        
    def follow(self, user):
    	user.followers += 1
        self.following += 1

user_1 = User("001", "angela")
user_2 = User("002", "jack")

user_1.follow(user_2) # user_1이 user_2를 팔로우함
 
print(user_1.followers) #0
print(user_1.following) #1
print(user_2.followers) #1
print(user_2.following) #0

퀴즈 프로젝트


간단한 OX게임을 제작한다.

  • 사용자에게 문제를 제시하고 true 또는 false를 선택하게 한다
  • 맞았는지 틀렸는지 채점하고, 점수를 준다.
  • 데이터에는 문제에 대한 속성으로 text와 answer이 존재한다.



퀴즈 프로젝트 1부: 질문 클래스 만들기

Create a Question class with an _ _init__() method with two attributes: text and answer

class Question:

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

new_q = Question("test", "False")
print(new_q.text) # test



퀴즈 프로젝트 2부: 데이터로부터 질문 객체 리스트 만들기

경고줄 없애기

코드

main.py

from question_model import Question
from data import question_data

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)
    
print(question_bank[0].answer)



퀴즈 프로젝트 3부: 퀴즈브레인과 next_question()메소드

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 # 문제를 1번부터라고 표기하기 위해
        input(f"Q.{self.question_number}: {current_question_text} (True/False): ")

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["text"]
    question_answer = question["answer"]
    new_question = Question(question_text, question_answer)
    question_bank.append(new_question)
    
quiz = QuizBrain(question_bank)
quiz.next_question()

# Q.1: A slug's blood is green. (True/False):



퀴즈 프로젝트 4부: 새로운 질문을 계속 보여주는 방법

사용자가 답을 입력한 후에 프로그램이 다음 질문을 계속 이어가는 것을 코딩한다.
이 문제는 methods를 만듬으로서 해결이 가능하다.
methods - next_question()
methods - still_has_question()

quiz_brain.py

class QuizBrain:

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

def still_has_questions(self):
	return self.question_number < len(self.question_list)
    # 위에 조건이 참이면 True, 거짓이면 False를 반환한다.
        
	def next_question(self):
    	current_question = self.question_list[self.question_number]
        self.question_number += 1 # 문제를 1번부터라고 표기하기 위해
        input(f"Q.{self.question_number}: {current_question_text} (True/False): ")

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["text"]
    question_answer = question["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()



퀴즈 프로젝트 5부: 답변을 확인하고 점수를 유지하기

답을 입력했을 때, 오답 체크와 확인하는 동작이 없고, 점수 출력 부분도 없으므로 해당 부분을 제작해본다.

  • methods - check_answer() 을 제작한다.

quiz_brain.py

class QuizBrain:

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

def still_has_questions(self):
	return self.question_number < len(self.question_list)
    # 위에 조건이 참이면 True, 거짓이면 False를 반환한다.
        
	def next_question(self):
    	current_question = self.question_list[self.question_number]
        self.question_number += 1 # 문제를 1번부터라고 표기하기 위해
        input(f"Q.{self.question_number}: {current_question_text} (True/False): ")
        self.check_answer(user_answer, correct_question.answer)
        
    def check_answer(self, user_answer, correct_answer):
    	if user_answer == 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"Youre current score is: {self.score}/{self.question_number}")
        print("\n")

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["text"]
    question_answer = question["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}")



OOP의 이점: 새로운 질문을 얻기 위해

profile
신입사원...

0개의 댓글