결론을 먼저 언급한다면,
핵심 차이: 들여쓰기(Indentation)
파이썬에서 들여쓰기(Indentation)는 코드의 소속을 결정하는 매우 중요한 문법 규칙입니다. while 문 아래에 들여쓰기된 코드 블록은 모두 반복문에 속하게 됩니다.
- 첫 번째 소스: print('풍월을 읊습니다') 구문에 들여쓰기가 없으므로 반복문과 상관없이 실행됩니다.
- 두 번째 소스: print('풍월을 읊습니다') 구문에 들여쓰기가 있으므로 반복문에 포함되어 반복 실행됩니다.
설명시작)
첫번째 소스
year=1
while year <=3:
print(f'서당개 {year}년')
year += 1
print('풍월을 읊습니다')
결과값)
서당개 1년
서당개 2년
서당개 3년
풍월을 읊습니다
파이썬 소스입니다. 소스 설명)
주어진 파이썬 코드는 'while' 반복문을 사용하여 특정 조건이 만족될 때까지 코드 블록을 반복 실행하는 예제입니다. 이 코드는 '서당개 3년이면 풍월을 읊는다'라는 한국 속담을 출력하는 간단한 로직을 구현하고 있습니다.
코드 분석
- year = 1
- year라는 변수를 선언하고 초기값으로 1을 할당합니다. 이 변수는 반복문의 횟수를 세는 카운터 역할을 합니다.
- while year <= 3:
- while 반복문의 시작을 알립니다. year 변수의 값이 3보다 작거나 같을 때까지 반복문을 계속 실행하라는 의미입니다. 조건이 참(True)인 동안 코드 블록이 반복됩니다.
- 1년 차: year가 1이므로 조건 (1 <= 3)이 참입니다.
- 2년 차: year가 2이므로 조건 (2 <= 3)이 참입니다.
- 3년 차: year가 3이므로 조건 (3 <= 3)이 참입니다.
- 4년 차: year가 4가 되면 조건 (4 <= 3)이 거짓(False)이 되어 반복문이 종료됩니다.
- print(f'서당개 {year}년')
- while 반복문 안에 있는 코드 블록입니다. 조건이 참일 때마다 이 줄이 실행됩니다.
- f-string (Formatted String Literal)을 사용하여 변수 year의 값을 문자열에 삽입합니다.
- year의 값에 따라 각각 '서당개 1년', '서당개 2년', '서당개 3년'이 출력됩니다.
- year += 1
- 이 부분은 year = year + 1과 같은 의미로, 반복문이 한 번 실행될 때마다 year 변수의 값을 1씩 증가시킵니다. 이 줄이 없다면 year의 값은 계속 1로 유지되어 무한 루프에 빠지게 됩니다.
- print('풍월을 읊습니다')
- while 반복문이 모두 끝난 후에 실행되는 코드입니다.
- 반복문이 종료되는 시점, 즉 year의 값이 4가 된 후에 이 문장이 출력됩니다.
실행 결과
코드를 실행하면 다음과 같은 순서로 결과가 출력됩니다.
- year는 1이 됩니다.
- while 조건 (1 <= 3)이 참이므로 print('서당개 1년')이 실행됩니다.
- year가 2가 됩니다.
- while 조건 (2 <= 3)이 참이므로 print('서당개 2년')이 실행됩니다.
- year가 3이 됩니다.
- while 조건 (3 <= 3)이 참이므로 print('서당개 3년')이 실행됩니다.
- year가 4가 됩니다.
- while 조건 (4 <= 3)이 거짓이므로 반복문이 종료됩니다.
- 마지막으로 반복문 밖의 print('풍월을 읊습니다')가 실행됩니다.
따라서 최종 출력 결과는 다음과 같습니다.
서당개 1년
서당개 2년
서당개 3년
풍월을 읊습니다
두번째 소스
year=1
while year <=3:
print(f'서당개 {year}년')
year = year + 1
print('풍월을 읊습니다')
결과)
서당개 1년
풍월을 읊습니다
서당개 2년
풍월을 읊습니다
서당개 3년
풍월을 읊습니다
파이썬 소스 및 결과값입니다. 소스 설명
주어진 파이썬 코드는 'while' 반복문을 사용하여 특정 조건이 만족될 때까지 코드 블록을 반복 실행하는 예제입니다. 이 코드는 '서당개 3년이면 풍월을 읊는다'라는 한국 속담을 출력하는 간단한 로직을 구현하고 있습니다.
코드 분석
- year = 1
- year라는 변수를 선언하고 초기값으로 1을 할당합니다. 이 변수는 반복문의 횟수를 세는 카운터 역할을 합니다.
- while year <= 3:
- while 반복문의 시작을 알립니다. year 변수의 값이 3보다 작거나 같을 때까지 반복문을 계속 실행하라는 의미입니다. 조건이 참(True)인 동안 코드 블록이 반복됩니다.
- print(f'서당개 {year}년')
- while 반복문 안에 있는 코드 블록입니다. 조건이 참일 때마다 이 줄이 실행됩니다.
- f-string (Formatted String Literal)을 사용하여 변수 year의 값을 문자열에 삽입합니다.
- year의 값에 따라 각각 '서당개 1년', '서당개 2년', '서당개 3년'이 출력됩니다.
- year = year + 1
- 반복문이 한 번 실행될 때마다 year 변수의 값을 1씩 증가시킵니다. 이 줄이 없다면 year의 값은 계속 1로 유지되어 무한 루프에 빠지게 됩니다.
- print('풍월을 읊습니다')
- 이 부분은 while 반복문 안에 포함되어 있어 print(f'서당개 {year}년')과 함께 반복적으로 실행됩니다.
실행 과정 및 결과
이 코드는 반복문 안에 있는 두 개의 print 문이 함께 반복 실행됩니다.
- year가 1일 때:
- print('서당개 1년')이 실행됩니다.
- year가 2가 됩니다.
- print('풍월을 읊습니다')가 실행됩니다.
- year가 2일 때:
- print('서당개 2년')이 실행됩니다.
- year가 3이 됩니다.
- print('풍월을 읊습니다')가 실행됩니다.
- year가 3일 때:
- print('서당개 3년')이 실행됩니다.
- year가 4가 됩니다.
- print('풍월을 읊습니다')가 실행됩니다.
year가 4가 되면 while 조건 (4 <= 3)이 거짓(False)이 되어 반복문이 종료됩니다.
이러한 실행 흐름 때문에 최종 출력 결과는 다음과 같습니다.
서당개 1년
풍월을 읊습니다
서당개 2년
풍월을 읊습니다
서당개 3년
풍월을 읊습니다
들여쓰기의 중요 포인트!!!!
print('풍월을 읊습니다') 위치로 인해 결과값이 다르게 나옵니다.
네, 맞습니다. print('풍월을 읊습니다') 구문의 위치가 달라졌기 때문에 출력 결과가 달라진 것입니다.
첫 번째 소스코드의 실행 원리
year=1
while year <=3:
print(f'서당개 {year}년')
year += 1
print('풍월을 읊습니다')
이 코드에서 print('풍월을 읊습니다')는 while 반복문 밖에 있습니다. 따라서 year가 1, 2, 3일 때 반복문이 모두 실행되고 나서, 즉 반복문이 종료된 후에 이 구문이 한 번만 실행됩니다.
- while 반복문 실행: '서당개 1년' → '서당개 2년' → '서당개 3년'
- while 반복문 종료 후: '풍월을 읊습니다'
그래서 최종 결과는 '서당개 3년'까지 출력된 후 '풍월을 읊습니다'가 한 번 나오는 것입니다.
두 번째 소스코드의 실행 원리
year=1
while year <=3:
print(f'서당개 {year}년')
year = year + 1
print('풍월을 읊습니다')
이 코드에서 print('풍월을 읊습니다')는 print(f'서당개 {year}년')와 함께 while 반복문 안에 있습니다. 즉, 반복문이 한 번 실행될 때마다 두 구문이 모두 실행됩니다.
- year가 1일 때: '서당개 1년'과 '풍월을 읊습니다'가 함께 출력
- year가 2일 때: '서당개 2년'과 '풍월을 읊습니다'가 함께 출력
- year가 3일 때: '서당개 3년'과 '풍월을 읊습니다'가 함께 출력
따라서 최종 결과는 '서당개 X년'과 '풍월을 읊습니다'가 번갈아가며 세 번 나오는 것입니다.
핵심 차이: 들여쓰기(Indentation)
파이썬에서 들여쓰기(Indentation)는 코드의 소속을 결정하는 매우 중요한 문법 규칙입니다. while 문 아래에 들여쓰기된 코드 블록은 모두 반복문에 속하게 됩니다.
- 첫 번째 소스: print('풍월을 읊습니다') 구문에 들여쓰기가 없으므로 반복문과 상관없이 실행됩니다.
- 두 번째 소스: print('풍월을 읊습니다') 구문에 들여쓰기가 있으므로 반복문에 포함되어 반복 실행됩니다.
이처럼 들여쓰기 하나로 인해 코드의 동작 방식과 결과가 완전히 달라지게 됩니다.