입장료 계산프로그램을 파이썬으로 만들어보기
오늘은 입장료 계산 프로그램을 만들어 볼 계획입니다.
놀이공원, 박물관 등을 방문시 입장료를 계산하는 과정을 파이썬 코드로 구현해 보았습니다.
먼저 해당 박물관의 입장료는 아래와 같습니다.
기본적인 코드의 흐름은 아래와 같습니다.
1. 인원 수 파악
2. 국가 유공자는 성인 수에서 제외
3. 요금 계산시 단체와 개인으로 분기
4. 65세 이상 성인은 성인의 인원수에서 빼기
5. 65세 이상 성인은 초등학생의 인원수에 더하기
6. 요금 계산 및 출력
다음은 Python으로 구현된 전체 코드입니다.
# 요금 튜플 선언 (개인, 단체) p = (2000, 1000, 500) pg = (1500, 700, 300) def countingPeople(target): while True: try: x = int(input(target+' 인원 수:')) except Exception as e: print('오류', e) print('다시 입력 바랍니다\n') continue else: return x while True: # 성인 인원 조사(adult) a = countingPeople('전체 성인') a65 = countingPeople('65세 이상 성인') hero = countingPeople('국가유공자') if a65+hero > a: print('성인인원 수가 맞지 않습니다') print('다시 입력해 주시기 바랍니다\n') print() continue # 청소년 인원 조사(teenage) t = countingPeople('청소년') # 초등학생 인원 조사(child) c = countingPeople('초등학생') # 전체 인원 수 all = a+t+c break # 전체 금액 변수 선언 sum = 0 # 국가 유공자 제외 a -= hero if all < 20: #20명 이하 개인 요금 sum = (a-a65)*p[0] + t*p[1] + (c+a65)*p[2] else: sum = (a-a65)*pg[0] + t*pg[1] + (c+a65)*pg[2] # 전체 요금 출력 print() print('전체 요금:', sum, '원')
먼저 p, pg는 price, price group을 뜻하는 튜플 변수 입니다.
개인과 단체 요금이 다르므로 각 요금을 따로 변수에 저장합니다.
countingPeople 함수는 전달인자로 성인, 청소년, 초등학생에 해당하는 문자열을 받고 인원수를 입력받아 반환하는 함수입니다.
단 숫자가 아닌 문자를 입력하는 경우나, 입력을 하지 않는 경우도 존재하므로, try, except, else 구문을 통해 오류처리 코드를 추가하였습니다.
만약 인원수 입력에 오류가 있다면 while 반복문안의 continue를 통해 다시 반복문의 처음으로 이동해 인원수를 입력받도록 처리하는 방식입니다.
본문의 while 구문은 65세 이상 성인+국가유공자=전체 성인 인원수를 초과하는 경우 오류처리를 위해 존재합니다.
예를 들어 전체 성인이 5명이라면, 65세 이상이 3명, 국가유공자가 3명이라면 인원수 입력이 잘못된 것으로 판단하고 이를 continue 구문을 통해 처리하는 부분입니다.
이어서 청소년과 초등학생의 인원수도 구합니다.
전체 인원수가 이상이 없다면 본문의 while 반복문을 break를 통해 빠져나오게 됩니다.
전체 인원 수 파악을 마쳤다면,
다음은 전체 성인의 인원에서 국가유공자의 인원을 빼줍니다.
이 과정에도 미묘한 부분이 존재하는데, 국가유공자를 전체 인원에는 포함시킨 후, 성인의 인원에서 빼주는 과정은 국가유공자의 인원을 단체에 포함시키기 위해서 입니다.
왜냐하면 국가유공자 또한 해당 단체의 구성원이므로, 단체 요금을 계산할 때 20명 이상인지에 포함되는 것이 타당하기 때문이죠.
마지막 요금 계산 부분은,
먼저 if 조건문을 통해 20명 미만이라면 개인요금을, 아니면 단체요금을 적용하도록 분기를 구성합니다.
이후 65세 이상 성인의 경우, 초등학생 요금을 적용해야 하므로 (성인수-65세 성인) X 성인요금 이며 (초등학생수+65성인) X 초등요금을 적용해 계산하는 방식입니다.
이상으로 설명을 마치며, 우리가 사용하는 입장권 판매기에도 위와 같은 방식의 코드가 들어가 있지 않을까요?
감사합니다.
댓글
댓글 쓰기