프로그램

[파이썬] 문제 : 주민등록번호로 성별,출생년도,띠,별자리 구하기

오디세이99 2023. 5. 15. 10:02
728x90
반응형

def getInfo(no):
    animal_year_lst = ['쥐','소','호랑이','또끼','용','뱀','말','양','원숭이','닭','개','돼지']
    zodiac_sign_dic = {'물병':['0120','0218'],'물고지':['0219','0320'],'양':['0321','0419']
                       ,'황소':['0420','0520'],'쌍둥이':['0521','0621'],'게':['0622','0722']
                       ,'사자':['0723','0822'],'처녀':['0823','0923'],'천칭':['0924','1022']
                       ,'전갈':['1023','1122'],'사수':['1123','1224'],'염소':['1225','0119']}
    gender = ''
    yy = ''
    animal_year = ''
    zodiac_sign = ''
    a_year = 1996
    a_name = '쥐띠'        # 2002가 말띠로 구함
    
    if int(no[-1])%2 == 0:   # 마지막 자리 값을 2로 나누어지면 짝수(여자)
        gender = '여자'
    else:
        gender = '남자'
        
    yy = ''
    year = 23                 # 현재 년도
    if int(no[:2]) >= 0 and int(no[:2]) <= year:  # no의 앞 2자리 값이 0보다 크고, 현재 년도보다 작거나 같으면 2000년대, 그외 1900년대
        yy = '20' + no[:2]
    elif int(no[:2]) > year:  # 현재 년도보타 크면 1900년대
        yy = '19' + no[:2]
    
    animal_year = animal_year_lst[(int(no[:4])%12) - 4]    # 1996(쥐띠)%12 => 4 가 기준. (int(no[:4])%12) - 4로 인뎃스 구함
    
    mmdd = no[2:6]                                  # 주민등록번호의 월일 값
    zodiac_name = '염소'                            # 일단 '염소'로 함(염소가 1225~0119로 크기 조건에 않 들어감. 그래서 기본으로 함)
    for key, value in zodiac_sign_dic.items():     # key(물병), value([0120,0218])과 같이 나옴
        if mmdd >= value[0] and mmdd <= value[1]:   # value([0120,0218])의 0120과 0218 사이의 값인지  검사
            zodiac_name = key                       # 사이에 들어가는 월일이면 별자리 지정
            break
#         elif (mmdd >= value[0] and mmdd <= '1231') or (mmdd >= '0101' and mmdd <= value[1]):
#             zodiac_name = key
#             break
    
    return gender, yy, animal_year, zodiac_name    # 구한 모든 값들을 넘김
    

while True:                                                 # 무한 반복. break로 종료
    print('주민등록번호 예시와 같이 입력해주세요(예시)001122-3')
    no = input('종료:x) >>> ')

    if no.upper() == 'X' or no == 'ㅌ':                      # x, ㅌ 면 종료
        print('프로그램이 종료됩니다.')
        break
                
    if len(no) < 8 or int(no[2:4]) > 12 or int(no[4:6]) > 31:  # 8자리가 안되거나, 월이 12가 넘거나, 일이 31이 넘어가면 다시 입력
        print('주민등록번호를 다시 입력해주세요.')
        continue
        
    gender, yy, animal_year, zodiac_name = getInfo(no)          # 함수 실행
    
    print('당신의 성별은',gender,',',yy,'년도에 태어났습니다.')  # 출력
    print('띠는 ',animal_year,'띠이고,')
    print('별자리는 ',zodiac_name,'자리입니다.')

728x90
반응형