연도를 입력받아 윤년인지 아닌지의 결과를 출력하는 프로그램
year=int(input('연도 입력: '))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
print(f'{year}년은 윤년')
else:
print(f'{year}년은 윤년 아님')
결과)
연도 입력: 2024
2024년은 윤년
연도 입력: 2025
2025년은 윤년 아님
파이썬 소스 및 결과 입니다. 소스 설명)
파이썬 코드는 윤년(leap year)을 판별하는 프로그램입니다. 이 코드는 그레고리력의 윤년 규칙을 따르며, 사용자가 입력한 연도가 윤년인지 아닌지를 판단하여 출력합니다.
소스 코드 분석
코드는 크게 입력, 조건문, 출력 세 부분으로 나뉩니다.
- year = int(input('연도 입력: '))
- input('연도 입력: '): 이 함수는 사용자에게 '연도 입력: '이라는 메시지를 화면에 보여주고, 키보드로 값을 입력받습니다.
- int(...): 사용자가 입력한 값은 기본적으로 문자열(string) 형태로 저장됩니다. int() 함수는 이 문자열을 정수(integer) 형태로 변환합니다. 변환된 정수 값은 year 변수에 할당됩니다.
- if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
- 이 부분은 윤년의 조건을 확인하는 조건문입니다. 윤년 규칙은 다음과 같습니다:
- 4로 나누어 떨어지는 해는 윤년입니다. year % 4 == 0
- 하지만, 100으로 나누어 떨어지는 해는 윤년이 아닙니다. year % 100 != 0
- 400으로 나누어 떨어지는 해는 다시 윤년이 됩니다. year % 400 == 0
- 파이썬의 논리 연산자 and와 or가 사용되었습니다.
- and: 두 조건이 모두 참일 때만 전체가 참이 됩니다.
- or: 두 조건 중 하나라도 참이면 전체가 참이 됩니다.
- 따라서, 조건문은 '(4로 나누어 떨어지면서 100으로 나누어 떨어지지 않거나) 또는 (400으로 나누어 떨어지는 해)'를 윤년으로 판단합니다.
- 이 부분은 윤년의 조건을 확인하는 조건문입니다. 윤년 규칙은 다음과 같습니다:
- print(f'{year}년은 윤년') 또는 print(f'{year}년은 윤년 아님')
- if 문의 조건이 참(True)이면, 즉 입력된 연도가 윤년의 규칙을 만족하면 {year}년은 윤년 이라는 메시지가 출력됩니다.
- else 문의 조건은 if 문의 조건이 거짓(False)일 때 실행됩니다. 따라서 윤년 규칙을 만족하지 않으면 {year}년은 윤년 아님 이라는 메시지가 출력됩니다.
- f-string: {year}는 변수 year에 저장된 실제 값이 출력되도록 하는 파이썬의 문자열 포맷팅 방식입니다.
결과 분석
- 연도 입력: 2024: 2024는 4로 나누어 떨어지고(2024 / 4 = 506), 100으로는 나누어 떨어지지 않으므로(2024 % 100 = 24), 첫 번째 조건 (year % 4 == 0 and year % 100 != 0)이 참이 됩니다. 따라서 '2024년은 윤년'이 출력됩니다.
- 연도 입력: 2025: 2025는 4로 나누어 떨어지지 않으므로(2025 % 4 = 1), 첫 번째 조건이 거짓이 되고, 400으로도 나누어 떨어지지 않습니다. 따라서 if문의 전체 조건이 거짓이 되어 else 문이 실행됩니다. 그 결과 '2025년은 윤년 아님'이 출력됩니다.
정리 질문)
100으로 나누어 떨어지는 해는 윤년이 아닙니다. year % 100 != 0, 즉, 윤년이 되려면, 100으로 나누었을 때 나머지가 0이면 윤년이 아니기 때문에, 윤년이 되려면, 0이 아니여야 윤년이 된다는 거군요.
네, 정확히 이해하셨습니다. 제공된 코드의 윤년 판별 로직에서 year % 100 != 0은 100으로 나누어 떨어지지 않는 해라는 의미입니다.
윤년의 규칙은 다음과 같습니다:
- 4로 나누어 떨어지는 해는 윤년이다.
- 하지만 100으로 나누어 떨어지는 해는 윤년이 아니다.
- 다시 400으로 나누어 떨어지는 해는 윤년이다.
따라서, 4로 나누어 떨어지면서 동시에 100으로 나누어 떨어지지 않아야만 윤년이 될 수 있습니다. 이것이 year % 4 == 0 and year % 100 != 0이라는 조건식의 의미입니다. 이 조건이 거짓이더라도, 400으로 나누어 떨어지는 해는 예외적으로 윤년이 되기 때문에 or year % 400 == 0 조건이 추가된 것입니다.
질문)
100으로 나누어 떨어진다는건 나머지가 0이면 윤년이 아니다. 맞죠?
네, 맞습니다. 윤년의 일반적인 규칙 중 하나는 100으로 나누어 떨어지는 해는 윤년이 아니다는 것입니다.
즉, (연도) % 100 == 0 이면 윤년이 아니게 됩니다.
하지만 이 규칙에는 예외가 있습니다. 100으로 나누어 떨어지더라도, 400으로 나누어 떨어지는 해는 다시 윤년이 됩니다.
따라서 윤년의 완전한 규칙은 다음과 같습니다.
- 4로 나누어 떨어지는 해는 윤년이다.
- 단, 100으로 나누어 떨어지는 해는 윤년이 아니다.
- 다시, 400으로 나누어 떨어지는 해는 윤년이다.
연산순서 질문)
year % 4 == 0 and year % 100 != 0 or year % 400 == 0: 이 조건은 and 와 or이 두개가 있습니다.
예를 들어, A and B or C 이면, 이 조건이 참이 되려면, 연산순서가 A and B 먼저 참,거짓인지 판단하고, (A and B의 결과값) or C 이렇게 연산하나요?
네, 정확하게 이해하셨습니다. 프로그래밍에서 논리 연산자 and와 or는 정해진 연산 우선순위를 가집니다.
논리 연산자 우선순위
파이썬을 비롯한 대부분의 프로그래밍 언어에서 and는 or보다 우선순위가 높습니다. 즉, and 연산이 or 연산보다 먼저 수행됩니다.
A and B or C
이러한 형태의 조건식은 다음과 같은 순서로 평가됩니다:
- (A and B) 먼저 평가됩니다.
- 이 (A and B)의 결과(참 또는 거짓)와 C를 가지고 or 연산을 수행합니다.
이것을 윤년 코드에 적용해보면 다음과 같습니다.
year % 4 == 0을 A, year % 100 != 0을 B, year % 400 == 0을 C라고 할 때,
(A and B) or C
이 조건은 A와 B가 모두 참이거나 또는 C가 참일 때 전체가 참이 됩니다.
- A and B: 4로 나누어 떨어지면서 100으로 나누어 떨어지지 않는 해
- C: 400으로 나누어 떨어지는 해
따라서, (4로 나누어 떨어지면서 100으로 나누어 떨어지지 않는 해) 또는 (400으로 나누어 떨어지는 해)는 윤년이 됩니다. 이 논리 구조는 그레고리력의 윤년 규칙을 완벽하게 반영합니다.
질문)
A or B and C 이면, A or (B and C), 즉, B and C가 먼저 연산하고, A or (B and C 의 결과값) 연산하나요?
네, 맞습니다.
A or B and C와 같은 조건식에서 and는 or보다 연산 우선순위가 높습니다.
따라서 컴퓨터는 이 식을 다음과 같은 순서로 평가합니다.
- (B and C)를 먼저 계산하여 참/거짓을 판단합니다.
- 그 다음 A or (B and C의 결과값)을 최종적으로 계산합니다.
즉, B와 C가 모두 참이거나 또는 A가 참일 때 전체 조건식이 참이 됩니다.
이는 괄호 ( )를 사용했을 때와 같은 결과입니다. 프로그래밍 시 혼동을 피하기 위해 연산 순서를 명확히 하고 싶다면 괄호를 사용하는 것이 좋은 습관입니다. 예를 들어, A or (B and C)와 같이 작성하면 누구나 연산 순서를 한눈에 알 수 있습니다.
'파이썬(Python)' 카테고리의 다른 글
| 파이썬, 복합 비교 연산자란 무엇인지 정리 (0) | 2025.08.24 |
|---|---|
| 파이썬, 月을 입력받아 계절을 출력하는 프로그램 (0) | 2025.08.24 |
| 파이썬 연산자 우선순위 (0) | 2025.08.24 |
| 파이썬, 중첩 선택문, 예제: 카위,바위,보 게임 소스 및 해석 (2) | 2025.08.23 |
| 파이썬, IDLE Shell, Matplotlib에서 한글 깨짐 해결 방법, Matplotlib (데이터 시각화 라이브러리) (0) | 2025.08.23 |
콘텐츠 내 자동삽입광고
