일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 오류
- API플랫폼
- 웹페이지
- SMTP
- 프로그램
- ndarray
- Python
- 상태코드
- 유데미
- twilio
- Tequila
- udemy
- 쉬티
- 부트스트랩
- phython
- HTML
- 게임
- Game
- Sheety
- 최저가
- Endpoint
- 계산기
- class
- 웹크롤링
- 파이썬
- 프로젝트
- Pygame
- 파싱
- API
- HTTP
- Today
- Total
데이터 분석가
파이썬(Python) 퀴즈 프로그램(quizprogram) 프로젝트 본문
안녕하세요 !
이번 시간에는 Class를 활용한 퀴즈 프로그램을 만들어 보겠습니다
data = {} 에 해당하는 딕셔너리는 아래 DB 사이트에서 간편하게 받을 수 있습니다 !
해당 사이트에 오른쪽 상단 'API' 를 클릭하여
취향에 맞게 선택 후, Select Type은 True/False를 선택합니다.
반환된 딕셔너리를 data = {} 에 넣으면 자바 형식이므로 code reform 을 활용하여 파이썬 코드로 변환해줍니다.
question_data = [
{
"category": "Science: Computers",
"type": "boolean",
"difficulty": "medium",
"question": "The HTML5 standard was published in 2014.",
"correct_answer": "True",
"incorrect_answers": [
"False"
},
{...},
]
Open Trivia DB에서 불러온 데이터를
data.py 파이썬 개별 파일에서(from data)
question_data로 저장해줍시다(import question_data)
저의 경우엔 10가지 딕셔너리만 불러왔습니다.
class Question: #파스칼 표기법(Pascal Casing Notation)으로 Q는 대문자
def __init__(self, q_text, q_answer): #self는 자동으로 입력, 질문, 대답 반환
self.text = q_text
self.answer = q_answer
question_model.py 파이썬 개별 파일에서(from question_model)
첫 번째 class Question: (import Question)
class 사용 시 Question Q는 파스칼 표기법에 의해 대문자를 사용합니다
def __init__를 사용하게 되면 변수에 self가 자동으로 표시되는데, 이후 두 변수 text, answer 을 설정합니다
이렇게 사용되면 data = {} 딕셔너리에 있는 질문, 답을 자동으로 입력시킬 수 있습니다.
class QuizBrain:
def __init__(self, q_list):
self.question_number = 0 #기본 값 0부터 시작
self.score = 0 #기본 값 0부터 시작
self.question_list = q_list #list를 받아 자동으로 추가
def still_has_question(self): #남은 질문을 묻는 반복문
return self.question_number < len(self.question_list)
#self.question_number은 += 1씩 커지고, len(self.question_list)는 질문의 갯수
quiz_brain.py 파이썬 개별 파일에서(from quiz_brain)
두 번째 class QuizBrain: (import QuizBrain)
첫 번째 class와 마찬가지로 (self)는 자동입력되고, 이번엔 질문 리스트(q_list)를 변수로 설정합니다
질문의 순서는 0부터 시작, score는 추후 식으로 += 1 씩 증가하게 됩니다
def still has_question(self):는 반복문입니다
간단히 설명하자면 0부터 시작하는 질문의 순서는 1씩 증가하는데(+=1)
질문의 순서가 전체 질문의 수가 적은 경우까지 반복합니다.
def next_question(self): #다음 질문 반복문
current_question = self.question_list[self.question_number] #질문인덱싱으로 현재 질문
self.question_number += 1 #질문마다 1씩 증가
user_answer = input(f"Q.{self.question_number}: {current_question.text} (True/False): ")
self.check_answer(user_answer, current_question.answer) #질문 개체이므로 answer
def check_answer(self, user_answer, correct_answer): #위의 해당 값들을 매개 변수로 받는다
if user_answer.lower() == correct_answer.lower():
self.score += 1
print("You got it!")
else:
print("That's wrong")
print(f"The correct answer was: {correct_answer}") #들여쓰기 True일 경우 반환
print(f"Your current score is : {self.score}/{self.question_number}")
print("\n")
def next_question(self):는
질문 리스트를 질문 순서로 인덱싱하여 이를 현재 질문으로 저장합니다
질문 순서는 1씩 증가하고
user_answer을 input 함수로 True or Flase로 입력받고
이를 check_answer(유저 대답, 현재 질문) 변수로 확인합니다.
위 check_answer 에 user_answer, current_question.answer 두 변수가 넣어졌으니
def check_ answer 함수가 이 두 변수를 받아서 대답과 질문이 같다면
score +1 증가, "You got it!"을 출력하고 {correct_answer}정답을 보여주고
현재 스코어 / 질문 순서를 반환하여 현 상황을 출력합니다.
반대로 대답과 질문이 같지 않다면 "That's wrong"을 반환합니다
위 세 가지 개별 파이썬 파일들을 main.py에서 불러와서 사용합니다
from question_model import Question
from data import question_data
from quiz_brain import QuizBrain
question_bank = [] #질문을 받을 리스트 생성
for question in question_data: #질문 DB에서 질문을 반복합니다
question_text = question["question"] #질문 인덱싱하여 불러오기
question_answer = question["correct_answer"] #정답 인덱싱하여 불러오기
new_question = Question(question_text, question_answer) #새로운 질문을 text,answer 불러오기
question_bank.append(new_question) #불러온 새로운 질문을 질문 받을 리스트에 추가
quiz = QuizBrain(question_bank) #초기화 시 [목록] 제출
while quiz.still_has_question(): #질문 순서 < 전체 질문수가 True일 경우
quiz.next_question() #다음 질문은 반환합니다.
print("You have completed the quiz")
print(f"Your final score was: {quiz.score}/{quiz.question_number}")
먼저 앞서 작성한 세 개별 파이썬 파일들을 순서대로 불러오고
질문을 받을 리스트 question_bank = [] 로 생성하고
질문 DB에서 질문을 for 문을 이용해 반복합니다
질문, 정답을 인덱싱하여 가져와 저장하고, 이를 바탕으로 새로운 질문을 추가하여 question_bank = []
리스트에 추가합니다.
def still_has_question(self):
return self.question_number < len(self.question_list)
추가한 질문들을 while 문을 이용해 질문 순서 < 전체 질문 = True
로 전체 질문이 다 나올 동안 반복합니다.
그리고 마지막으로 합산된 quiz.score / 전체 질문 수 quiz.question_number 로 출력해서 보여줍니다.
조금 헷갈리실 수도 있을거 같습니다 !
저도 class 함수를 활용한 경험이 없기 때문이죠. !
하지만 위와 같이 간단한 퀴즈에 대한 값을 자동으로 입력해주는
class __init___(self) 형식을 잘 알고 사용한다면 정말 편하게 작성 가능할거 같습니다.
특히 많은 딕셔너리를 포함하는 퀴즈와 같은 질문에 대한 반환일 경우 빛을 발하는거 같습니다 !
그렇다면 한번씩 사용해서 작성해봅시다 !
'파이썬(python) 프로젝트 모음' 카테고리의 다른 글
파이썬(Python) 거북이 경주(turtle race) 프로젝트 (0) | 2023.03.28 |
---|---|
파이썬(Python) 스피로 그래프 & Spot painting (0) | 2023.03.28 |
파이썬(Python) 커피 자판기 프로그램 (0) | 2023.03.24 |
파이썬(Python) HigerLower 게임 프로젝트 (0) | 2023.03.24 |
파이썬(Python) Up-Down(숫자추측) 게임 프로젝트 (0) | 2023.03.23 |