프로그램
[파이썬] 문제 : 주민등록번호로 성별,출생년도,띠,별자리 구하기
오디세이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
반응형