사용자 도구

사이트 도구


refactoring_0

리팩터링_0

출처

예제 0: 연극 극단의 청구서

다양한 연극을 외주로 받아서 공연하는 극단이 있다고 생각해보자. 공연 요청이 들어오면 연극의 장르와 관객 규모를 기초로 비용을 책정한다. 현대 이 극단은 두 가지 장르, 비극(tragedy)과 희극(comedy)만 공연한다. 그리고 공연료와 별개로 포인트(volume credit)를 지급해서 다음번 의뢰 시 공연료를 할인받을 수도 있다. 일정의 충성도 프로그램인 셈이다.

극단은 공연할 '연극 정보'를 plays.json 파일에 저장한다.

극단은 공연료 '청구서에 필요한 데이터'를 invoices.json 파일에 저장한다.

이 때 공연료 청구서를 출력하는 함수

statement(invoice, plays) -> str

를 Python 으로 작성하시오.

참조 정보

조건

  • 비극(tragedy)은 기본 $400 이며, 30명이 넘을 경우 추가인원 1명 당 $10 추가. (예: 31명일 때 $400 + $10)
  • 희극(comedy)은 기본 $300 이며, 1명 당 $3 추가. 20명이 넘을 경우 $100 + 추가인원 (21명째부터) 1명 당 $5 추가한다. (예: 21명일 때, $300 + ($3 * 21) + ($100 + ($5 * 1)))
  • 포인트는 30명을 초과한 인원 1명 당 1센트이며, 희극인 경우 5명 당 1센트 추가.
  • 비극도 희극도 아닌 연극의 경우 에러를 던진다 (raise).

plays.json

{
  "hamlet": {"name": "Hamlet", "type": "tragedy"},
  "as-like": {"name": "As You Like It", "type": "comedy"},
  "othello": {"name": "Othello", "type": "tragedy"}
}

invoices.json

[
  {
    "customer": "BigCo",
    "performances": [
      {
        "playID": "hamlet",
        "audience": 55
      },
      {
        "playID": "as-like",
        "audience": 35
      },
      {
        "playID": "othello",
        "audience": 40
      }
    ]
  }
]

청구서 예시

청구 내역 (고객명: BigCo)
  Hamlet: $650.00 (55석)
  As You Like It: $580.00 (35석)
  Othello: $500.00 (40석)
총액: $1,730.00
적립 포인트: 47점
refactoring_0.txt · 마지막으로 수정됨: 2022/06/16 05:07 저자 hyudblab