반응형
사실 이 과제는 파이썬이 아닌 코틀린으로 풀어야하는 과제이다. 그런데 코틀린 문법을 하나도 모르고 무엇이 필요한지 감이 안 와서 파이썬으로 설계하고 그것을 코틀린으로 마이그레이션 하는 방향으로 풀고자 한다.
문제 요구조건은 위와 같지만 설명이 매우 불친절하다. 질문해도 답변을 안해줘서 모호한 부분은 내가 임의대로 판단해서 풀고자한다.
1. 요구조건
주사위 클래스와 점수판 클래스를 구현한다. get/set을 반드시 포함해야한다.
1) 주사위 클래스
- 1. 최대 10의 값을 가지는 정수를 생성한다.
- 최대 10인데 1~10인지, -무한대 ~ 10인지 몰라서 가장 보편적인 1~10 주사위로 설정
- 2. 생성한 점수는 점수판 클래스로 전달한다.
2) 점수판 클래스
- 1. 주사위 클래스로부터 전달받은 점수를 기록
- 2. 똑같은 점수가 연속으로 들어오면 10점을 추가하여 기록
- 3. 20개의 점수가 기록되면 점수들을 출력한다.
- 비동기식으로 구현하여 20개가 되는순간 출력을 하는 것인지 아니면 20번 기록하여 출력하도록 하는 것인지 애매하여 후자로 구현한다.
- 4. 점수 출력시 15가 넘는 값은 15로 출력한다.
조건을 정리하면 위와 같다. 그럼 다음 요구조건을 바탕으로 먼저 파이썬으로 구현해보자.
import random
class Dice:
def __init__(self):
self.number = 0
# 주사위를 굴리는 메소드
def roll(self, scoreboard):
self.number = random.randint(1, 10) # 1~10 사이에 점수를 생성
scoreboard.record(self.number) # 점수판에 굴려서 나온 점수를 기록한다.
# 주사위를 20번 굴리는 메소드
def play(self, scoreboard):
for _ in range(20):
self.roll(scoreboard)
class Scoreboard:
def __init__(self):
self.score = [0 for _ in range(20)] # 20개 기록하는 점수판
self.before = 0 # 이전 점수 기록
self.count = 0 # 기록된 점수 개수 카운트
# 점수를 기록하는 메소드
def record(self, value):
if value == self.before: # 이전 점수와 같을 경우 10점 추가점수
self.score[self.count] = value + 10
else:
self.score[self.count] = value # 그렇지 않을 경우 그대로 기록
self.before = value # 이전 점수 갱신
self.count += 1 # 기록된 점수 +1
if self.count > 19: # 20번 기록할 경우 점수 출력
self.print_score()
# 20개 점수 출력하는 함수
def print_score(self):
print('=' * 130)
print("총 20개의 점수를 출력합니다.")
for i in range(self.count):
if i == 10: # 10번 출력 후 줄바꿈
print()
if self.score[i] > 15: # 점수 15 초과시 15로 출력
print(f"<{i+1}번:15(초과)>", end=" ")
else:
print(f"<{i+1}번:{self.score[i]}>", end=" ")
print(f"총점 : {sum(self.score)} / 평균 : {sum(self.score)/len(self.score):g}")
print()
print("모든 점수를 출력하고 점수판을 초기화합니다.")
print('=' * 130)
self.score = [0 for _ in range(20)] # 출력 후 점수판 초기화
self.count = 0
self.before = 0
dice = Dice()
scoreboard = Scoreboard()
dice.play(scoreboard)
반응형
'Development > Python' 카테고리의 다른 글
Python. 파이썬 클래스 간단 정리 (0) | 2020.05.20 |
---|---|
Python. f-string 쓰세요. 백번 쓰세요. (0) | 2020.05.12 |
Python. lambda 함수 (0) | 2020.05.10 |
Python. dictionary와 max, min (0) | 2020.05.08 |
Python. periodictable 모듈로 분자량 계산하기 (0) | 2020.05.05 |