출생일(월과 일)이 주어졌을 때, 그에 해당하는 점성술 기호, 즉 별자리(Zodiac Sign)를 화면에 표시하는 것이 이 프로그램의 목표입니다. 서양 점성술에서는 태어난 날짜가 어느 별자리 구간에 속하는지에 따라 12개의 별자리 중 하나가 결정됩니다.
예제
입력 : Day = 13, Month = November 출력 : Scorpio (전갈자리)
알고리즘
프로그램의 동작 흐름은 다음 세 단계로 정리할 수 있습니다.
1단계 : 생년월일(월, 일)을 입력받는다. 2단계 : 입력된 월과 일이 특정 별자리의 유효한 날짜 범위 안에 있는지 검사한다. 3단계 : 해당되는 별자리 이름을 출력한다.
별자리별 날짜 범위
코드를 이해하기 전에 각 별자리가 담당하는 날짜 범위를 먼저 살펴보면 도움이 됩니다.
| 별자리 | 영문명 | 날짜 범위 |
|---|---|---|
| 염소자리 | Capricorn | 12월 22일 ~ 1월 19일 |
| 물병자리 | Aquarius | 1월 20일 ~ 2월 18일 |
| 물고기자리 | Pisces | 2월 19일 ~ 3월 20일 |
| 양자리 | Aries | 3월 21일 ~ 4월 19일 |
| 황소자리 | Taurus | 4월 20일 ~ 5월 20일 |
| 쌍둥이자리 | Gemini | 5월 21일 ~ 6월 20일 |
| 게자리 | Cancer | 6월 21일 ~ 7월 22일 |
| 사자자리 | Leo | 7월 23일 ~ 8월 22일 |
| 처녀자리 | Virgo | 8월 23일 ~ 9월 22일 |
| 천칭자리 | Libra | 9월 23일 ~ 10월 22일 |
| 전갈자리 | Scorpio | 10월 23일 ~ 11월 21일 |
| 사수자리 | Sagittarius | 11월 22일 ~ 12월 21일 |
예제 코드
아래 코드는 조건문(if-elif)과 파이썬의 삼항 연산자(조건부 표현식)를 활용하여 월과 일을 검사하고, 해당 별자리를 결정합니다.
def zodiac_sign(day, month):
# 입력된 월과 일이 특정 별자리의 유효 범위에
# 속하는지 검사합니다.
if month == 'december':
astro_sign = 'Sagittarius' if (day < 22) else 'Capricorn'
elif month == 'january':
astro_sign = 'Capricorn' if (day < 20) else 'Aquarius'
elif month == 'february':
astro_sign = 'Aquarius' if (day < 19) else 'Pisces'
elif month == 'march':
astro_sign = 'Pisces' if (day < 21) else 'Aries'
elif month == 'april':
astro_sign = 'Aries' if (day < 20) else 'Taurus'
elif month == 'may':
astro_sign = 'Taurus' if (day < 21) else 'Gemini'
elif month == 'june':
astro_sign = 'Gemini' if (day < 21) else 'Cancer'
elif month == 'july':
astro_sign = 'Cancer' if (day < 23) else 'Leo'
elif month == 'august':
astro_sign = 'Leo' if (day < 23) else 'Virgo'
elif month == 'september':
astro_sign = 'Virgo' if (day < 23) else 'Libra'
elif month == 'october':
astro_sign = 'Libra' if (day < 23) else 'Scorpio'
elif month == 'november':
astro_sign = 'Scorpio' if (day < 22) else 'Sagittarius'
print(astro_sign)
# 드라이버 코드
if __name__ == '__main__':
d = int(input("Enter Day ::>"))
m = input("Enter the Month ::>")
zodiac_sign(d, m)실행 결과
Enter Day ::>13 Enter the Month ::>november scorpio
코드 설명
각 월마다 별자리가 바뀌는 경계일(boundary date)이 다릅니다. 예를 들어 11월의 경우 21일까지는 전갈자리(Scorpio)이고, 22일부터는 사수자리(Sagittarius)입니다. 코드에서는 day < 22와 같은 조건으로 이 경계를 판별하며, 조건이 참이면 앞쪽 별자리, 거짓이면 뒤쪽 별자리를 선택하는 방식으로 동작합니다.
삼항 연산자 'A' if (조건) else 'B' 덕분에 if-else 블록을 여러 줄로 작성하지 않고도 한 줄로 깔끔하게 별자리를 결정할 수 있습니다. 사용자 입력은 input() 함수로 받으며, 일(day)은 정수로 변환하고 월(month)은 소문자 영문 문자열로 비교한다는 점에 유의하세요.