이 튜토리얼에서는 파이썬을 활용해 간단한 산술 연산 퀴즈 프로그램을 직접 구현해 보겠습니다. 난수 생성과 함수 분리 등 파이썬의 핵심 개념을 자연스럽게 익힐 수 있는 실습형 예제입니다.
과제 개요
목표는 무작위로 생성된 기본 사칙연산 문제를 출제하는 퀴즈 프로그램을 만드는 것입니다. 요구 사항은 다음과 같습니다.
- 사용자가 출제할 문제의 개수를 입력하면 그에 맞게 문제를 생성한다.
- 각 문제마다 사용자로부터 답을 입력받고 정답 여부를 판단한다.
- 프로그램 종료 시 전체 점수(맞힌 문제 수)를 출력한다.
그럼 바로 코드를 살펴보겠습니다.
전체 코드
# random 모듈과 operator 모듈 임포트
import random
import operator
# 메인 함수
# 출제할 문제의 개수를 입력받음
def main(n):
print("Welcome to the quiz\nYou should answer floats upto 2 decimals")
# 점수 초기화
score = 0
# n개의 문제를 생성하기 위한 반복문
for i in range(n):
# 문제의 정답 여부와 정답 값을 가져옴
is_correct, answer = question(i)
# 정답인지 확인
if is_correct:
# 정답이면 점수 1점 증가
score += 1
print('Correct Congrats!')
else:
# 오답이면 정답 출력
print(f'Incorrect! Answer: {answer}')
# 최종 점수 출력
print(f'Total score: {score}')
# 문제를 출제하고 답을 확인하는 함수
def question(n):
# generate_question 함수로부터 정답을 받아옴
answer = generate_question()
# 사용자에게 답 입력받기
user_answer = float(input("Answer: "))
# 정답 여부와 정답 값을 메인 함수로 반환
return user_answer == answer, answer
# 무작위 문제를 생성하는 함수
def generate_question():
# 무작위 선택용 연산자 딕셔너리 초기화
operators = {
'+' : operator.add,
'-' : operator.sub,
'*' : operator.mul,
'/' : operator.truediv,
'//' : operator.floordiv,
'%' : operator.mod
}
# 계산에 사용할 숫자 목록 초기화
nums = [i for i in range(10)]
# nums에서 두 개의 무작위 숫자 추출
_1, _2 = nums[random.randint(0, 9)], nums[random.randint(0, 9)]
# 연산자 목록에서 무작위 연산자 선택
symbol = list(operators.keys())[random.randint(0, 5)]
# 정답 계산 (소수점 둘째 자리까지 반올림)
answer = round(operators.get(symbol)(_1, _2), 2)
print(f'{_1} {symbol} {_2}?')
return answer
if __name__ == '__main__':
main(5)
코드 설명
프로그램은 세 가지 함수로 나뉩니다.
- main(n): 전체 진행 흐름을 관리합니다. 문제 수만큼 반복하며 점수를 집계하고 마지막에 총점을 출력합니다.
- question(n): 문제 하나를 출제하고 사용자의 답을 입력받은 뒤, 정답 여부와 함께 반환합니다.
- generate_question():
operator모듈의 함수들을 딕셔너리에 매핑하여 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 몫 연산(//), 나머지 연산(%) 중 하나를 무작위로 선택합니다. 이어서 0~9 범위의 숫자 두 개를 뽑아 식을 만들고, 소수점 둘째 자리까지 반올림한 정답을 반환합니다.
실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
Welcome to the quiz You should answer floats upto 2 decimals 5 + 7? Answer: 12 Correct Congrats! 9 / 9? Answer: 1 Correct Congrats! 4 + 7? Answer: 11 Correct Congrats! 6 // 6? Answer: 1.0 Correct Congrats! 9 % 3? Answer: 0 Correct Congrats! Total score: 5
모든 문제를 맞히면 최종적으로 총점이 출력됩니다. 오답을 입력할 경우에는 정답과 함께 'Incorrect!' 메시지가 표시됩니다.
마무리 및 확장 아이디어
여기서 더 발전시키고 싶다면 다음과 같은 기능을 추가해 볼 수 있습니다.
- 난이도 조절: 숫자 범위를 넓히거나 두 자릿수 이상의 수를 사용해 난이도를 올립니다.
- 단계별 출제: 쉬운 문제부터 시작해 정답률에 따라 점진적으로 어려운 문제를 출제합니다.
- 정답률 통계: 총점뿐 아니라 정답률(%)도 함께 출력해 보세요.
- 입력 예외 처리: 숫자가 아닌 값이 입력되었을 때
try-except로 오류를 처리하면 프로그램이 더 견고해집니다.
직접 도전해 보면서 자신만의 버전으로 발전시켜 보세요. 즐거운 코딩 되시길 바랍니다. 궁금한 점이 있다면 댓글로 남겨주세요!