[Python]원하는 달 날짜 수 출력하기
❓원하는 달 날짜 수 출력하기
- 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
👉Process
👉Code
# 연도와 월을 입력받아 그 달의 날짜 수를 알려주는 프로그램
# IsLeapYear 함수를 정의함. 윤년을 판별해줌. 2번과 같으므로 주석 생략.
def IsLeapYear(year):
if year % 4 != 0:
return False
if year % 400 == 0:
return True
if year % 100 != 0:
return True
return False
# GetDayOfMonth 함수를 정의함. 연도와 월에 맞는 날짜 수를 결과값으로 갖는 함수.
# year, month 두 인자를 가지고, 조건문 if를 사용하여 정의함.
def GetDayOfMonth(year, month):
# 먼저 입력받은 월이 2월인지 아닌지 확인함.
if month == 2:
# IsLeapYear함수를 호출하여 윤년인지 아닌지 판별함. 윤년이면 결과값이 True이므로 29를 리턴. 그렇지 않으면 28을 리턴함.
if IsLeapYear(year):
return 29
else:
return 28
# 4,6,9,11월일 땐 무조건 30일이므로 30리턴. 해당 월 수가 더 적으므로 4,6,9,11월인지 먼저 조건문을 사용해 판단.
if month == 4 or month == 6 or month == 9 or month == 11:
return 30
# 위의 조건문에 해당되지 않는 1,3,5,7,8,10,12월은 31을 리턴.
return 31
# 먼저 사용자에게 프로그램에 대한 설명을 출력해줌.
print("해당 연도, 월의 날짜 수를 알려주는 프로그램입니다.\n")
# 메인코드. 무한루프를 만들어 계속해서 프로그램이 돌아가도록 설정함.
# y와 m 두 변수를 각각 입력받아 조건에 맞게 if문을 사용하여 코딩함.
while True:
# 정수형으로 연도를 입력받음
y = int(input("연도를 입력해주세요 : "))
# -1이면 바로 종료 안내문구를 출력하고 break를 통해 루프를 빠져나가 종료됨.
if y == -1:
print("종료합니다.")
break
# 1이하의 값이 들어오면 1이상의 수로 입력하라는 문구 출력후 continue를 통해 while문의 처음으로 돌아가 다시 시작.
if y < 1:
print("연도를 1이상의 수로 입력해주세요.\n")
continue
#y와 같은 방식.
m = int(input("월을 입력해주세요 : "))
if m == -1:
print("종료합니다.")
break
# m이 1이상 12이하의 수가 아닌 경우 해당 안내문자 출력후 while문 처음으로 돌아가 다시 입력받음.
if m < 1 or m > 12:
print("월을 1이상 12이하의 수로 입력해주세요.\n")
continue
# GetDayOfMonth함수를 호출하여 각각 y와m을 대입하여 그 결과값을 result에 저장하고, 출력함.
result = GetDayOfMonth(y, m)
print(result)
👉Result
🙃후기/느낀점
- 처음 코딩을 할 때는 입력받는 두 정수를 한번에 입력받도록 코딩했었다.
- map함수와 int, input, split함수를 사용하여 변수 2개를 한 번에 입력받아 저장하도록 했다. 그러나 이렇게 코딩하면 사용자가 연도와 월을 꼭 ‘ , ’를 사용하여 입력해야하고, 그러려면 안내하는 말을 또 출력해야하기 때문에 수정했다. 또한 -1을 넣었을때 바로 프로그램이 종료되도록 만들고 싶어서 y와 m을 하나하나 입력받아 바로 -1인지 범위 안의 수인지 확인하도록 조건문을 붙였다.
- 또한 조금 더 간결하게 하기위해 else를 지우는 등 필요없는 것은 지우고 수정했다.
- 코딩하면서 아쉬웠던 점은 내 코딩이 투박해 보이지 않도록 짜고 싶었지만 그게 안되었다는 점이다. 특히 메인코드를 짤 때 좀 더 세련되고 간결하면서도 사용자가 편할 수 있도록 코딩하고 싶었지만 그게 잘 안되어 어려웠던 것 같다.