Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

생년월일로 별자리(점성술 기호)를 표시하는 Python 프로그램

출생일(월과 일)이 주어졌을 때, 그에 해당하는 점성술 기호, 즉 별자리(Zodiac Sign)를 화면에 표시하는 것이 이 프로그램의 목표입니다. 서양 점성술에서는 태어난 날짜가 어느 별자리 구간에 속하는지에 따라 12개의 별자리 중 하나가 결정됩니다.


예제

입력 : Day = 13, Month = November
출력 : Scorpio (전갈자리)

알고리즘

프로그램의 동작 흐름은 다음 세 단계로 정리할 수 있습니다.

1단계 : 생년월일(월, 일)을 입력받는다.
2단계 : 입력된 월과 일이 특정 별자리의 유효한 날짜 범위 안에 있는지 검사한다.
3단계 : 해당되는 별자리 이름을 출력한다.

별자리별 날짜 범위

코드를 이해하기 전에 각 별자리가 담당하는 날짜 범위를 먼저 살펴보면 도움이 됩니다.

별자리영문명날짜 범위
염소자리Capricorn12월 22일 ~ 1월 19일
물병자리Aquarius1월 20일 ~ 2월 18일
물고기자리Pisces2월 19일 ~ 3월 20일
양자리Aries3월 21일 ~ 4월 19일
황소자리Taurus4월 20일 ~ 5월 20일
쌍둥이자리Gemini5월 21일 ~ 6월 20일
게자리Cancer6월 21일 ~ 7월 22일
사자자리Leo7월 23일 ~ 8월 22일
처녀자리Virgo8월 23일 ~ 9월 22일
천칭자리Libra9월 23일 ~ 10월 22일
전갈자리Scorpio10월 23일 ~ 11월 21일
사수자리Sagittarius11월 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)은 소문자 영문 문자열로 비교한다는 점에 유의하세요.