1. 클래스, 생성자 만들기
- Quiz 클래스 만들기
- init 함수에 text, answer 속성 만들기
[코드]
class Quiz:
def __init__(self, text, answer):
# 생성자(constructor): 속성 만들기
self.text = text
self.answer = answer
# 객체 만들기
quiz1 = Quiz("여름에 가장 좋아하는 음식이 무엇인가요?", "팥빙수")
quiz2 = Quiz("겨울에 가장 좋아하는 음식이 무엇인가요?", "귤")
[실행 화면]
2. 질문 사전 만들기
- question data에 text, answer가 있음.
- 이 데이터들을 파라미터로, Quiz클래스의 객체를 차례대로 생성하자.
- 이 객체들의 모음을 quiz_bank라고 이름짓는다.
[코드]
#데이터들
question_data = [
{"text": "비만 오면 시끄럽게 나타나는 가장 빠른 개는", "answer": "번개"},
{"text": "어느 식당이든 다 키우고 있는 개는?", "answer": "이쑤시개" },
{"text": "개는 개인데 여러 색을 가진 개는?", "answer": "무지개"},
{"text": "우리가 잘 때 늘 옆에 있어 주는 개는?" , "answer": "베개"},
{"text": "개는 개인데 날아다니는 개는?", "answer": "솔개"},
]
# quiz_bank, 빈 리스트 생성하기
quiz_bank = []
# 반복문 돌리면서 해당 순서의 text, answer로 객체 만들기
for data in question_data:
data_text = data["text"]
data_answer= data["answer"]
quiz_bank.append(Quiz(data_text, data_answer))
print(quiz_bank)
[실행 화면]
3. 문제 내는 머신 만들기
1. 문제 내는 머신인 class 만들기 :QuizBrain
2. 문제 번호와 문제 모음이 있는 생성자 만들기: question_number, quiz_bank
3. 문제가 나오면 사용자가 정답을 입력하기
4. 문제를 실행하고 나면, question_number가 1이 추가 된다.
[코드]
class Quiz_Brain:
#생성자 만들기
def __init__(self, questions_list):
self.question_number = 0
self.quiz_bank =questions_list
#문제 내기
def next_question(self):
current_question = quiz_bank[self.question_number]
input(f"Q.{self.question_number + 1}: {current_question.text}?")
self.question_number += 1
# 객체 만들기
quiz_brain = Quiz_Brain(quiz_bank)
#실행하기
print(quiz_brain.question_number)
print(quiz_brain.quiz_bank)
quiz_brain.next_question()
print(quiz_brain.question_number)
[실행화면]
4. 문제 수 만큼, 자동으로 문제 넘어가기
1. 만약 문제가 남아 있다면, 자동으로 문제가 나오게 하기- while구문
2. quiz_brain의 메소드로 넣기 (question_left)
[코드]
class Quiz_Brain:
def __init__(self, questions_list):
self.question_number = 0
self.quiz_bank =questions_list
def next_question(self):
current_question = quiz_bank[self.question_number]
input(f"Q.{self.question_number + 1}: {current_question.text}?")
self.question_number += 1
# 문제 남아 있는지 확인하기 True/False
def still_has_question(self):
return self.question_number < len(self.quiz_bank)
# 문제 있는 동안 자동으로 문제 나오게 하기
while quiz_brain.still_has_question():
quiz_brain.next_question()
[실행화면]
5. 답변 확인하기
- 답을 맞추었다면, 점수를 1 더하기(check_answer 메서드와 score 속성 추가하기)
- 상황에 맞는 문구 출력하기(정답입니다. 틀렸습니다. 점수는 ~입니다 등등)
[코드]
class Quiz:
def __init__(self, text, answer):
self.text = text
self.answer = answer
class Quiz_Brain:
def __init__(self, questions_list):
self.question_number = 0
self.quiz_bank =questions_list
# score 속성 추가하기. 기본값으로 0
self.score = 0
def next_question(self):
current_question = self.quiz_bank[self.question_number]
self.question_number += 1
# user_answer, correct_answer 변수 정하기.
user_answer = input(f"Q.{self.question_number}: {current_question.text}?")
correct_answer = current_question.answer
# next_question 함수 내에서 정의되었으므로
# 즉, quizbrain()객체의 속성이 아니므로
# check_answer의 파라미터로 들어가는 위의 두 변수에는 self붙이지 X
self.check_answer(user_answer, correct_answer)
def still_has_question(self):
return self.question_number < len(self.quiz_bank)
def check_answer(self, user_answer, correct_answer):
if user_answer == correct_answer:
#score은 quiz_brain()객체의 속성이기에 self붙임
self.score += 1
else:
print(f"땡!! 정답은 {correct_answer}입니다.")
print(f"현재 점수는 {self.score} / {self.question_number}입니다.")
quiz_bank= []
for data in question_data:
data_text = data["text"]
data_answer= data["answer"]
quiz_bank.append(Quiz(data_text, data_answer))
#print(quiz_bank)
quiz_brain = Quiz_Brain(quiz_bank)
while quiz_brain.still_has_question():
quiz_brain.next_question()
print()
print(f"모든 문제를 풀었습니다. 최종 점수는 {quiz_brain.score} / {quiz_brain.question_number}입니다.")
[실행화면]
[최종화면]
아래의 재생버튼 ▶을 눌러서 실행해보세요
'파이썬 > 파이썬(python) 중급' 카테고리의 다른 글
[18-1 파이썬] 터틀 실습하기 (0) | 2022.08.26 |
---|---|
오픈 트리비아 데이터베이스(open trivia database) - 질문 저장 창고 (0) | 2022.08.25 |
[17-4 파이썬] 클래스에 메소드 만들기 (0) | 2022.08.25 |
[17-3 파이썬] 클래스 속성 만드는 방법 (0) | 2022.08.24 |
[17-2 파이썬] 파스칼케이스, 캐멀케이스, 스네일케이스 (2) | 2022.08.24 |