[프로그래밍 기초]에 관심이 있으신가요?
무제한으로 수강해 보세요!
코드잇 시작하기
파이썬 프로그래밍의 힘>제어문>이상한 수학 문제 I
들여쓰기의 차이
호기민호기민STONE
2017년 4월 10일 작성
호기민호기민STONE

안녕하세요.

들여쓰기 관련하여 아래와 같이 질문드립니다. 이상한 수학문제 1,2에서 모두 같은 이유로 헤매이고 있는데요. 아래 같이, i = i + 1이 어느 부분에 들여 쓰여져 있느냐에 따라 차이가 있음을 확인 했습니다. <1>의 경우,i = i + 1while문에 걸리는건가요? 또, <2>의 경우에서 출력이 되지 않는 이유는 무엇인가요?

<1>

while i < 10 :
    if i % 2 == 0 or i % 3 == 0:
        sum = sum + i
    i = i + 1
print(sum)

<2>

while i < 10 :
    if i % 2 == 0 or i % 3 == 0:
        sum = sum + i
        i = i + 1
print(sum)

파이썬에서는 들여쓰기가 매우 매우 중요한 역할을 차지합니다. 그 이유는 들여쓰기가 코드의 논리의 층위를 결정해주기 때문입니다.

어떤 코드가 어떠한 부분(함수, 반복문, 조건문 등)에 들여써져있으면, 이는 그 코드가 해당 부분에 속함을 의미합니다. 만약 어떤 코드가 어떠한 부분에 들여써져있지 않으면, 이는 그 코드가 해당 부분에 속하지 않음을 의미합니다. 병렬적인 관계거나, 대등한 관계거나, 무관한 관계가 보통이겠죠.

쉽게 예시를 들어보겠습니다.

1. i = 2
2. if i % 2 == 0:
3.     print("case 1")
4. if i == 3:
5.     print("case 2")
6. print("case 3")
case 1
case 3

1번째 줄에서 i = 2로 정의되었습니다. 2번째 줄에서 if문이 있는데, if문은 i의 값이 2로 나누어떨어지는지 확인하고 있습니다. 22로 나누어떨어지므로, if문이 참이 됩니다.

이 때문에 3번째 줄이 실행됩니다. (3번째 줄은 if문에 들여써져있으므로, if문이 참일 때에만 실행되겠죠.) print("case 1")이라는 명령이 있으므로, "case 1"이 출력됩니다.

반면, 4번째 줄의 if문에서는 i3이 아니므로, 거짓입니다. 이 때문에 if문에 속해있는 5번째 줄이 실행되지 않습니다.

6번째 줄은 들여써져있지 않기 때문에 어떤 조건문에 속하는 것이 아닙니다. print("case 3")라는 명령이 있으므로 "case 3"가 출력됩니다.

질문하신 내용은 이와 동일합니다.

<2>번 case에서는 i = i + 1이 반복문에 속해있는 것이 아니라(물론 if문이 반복문에 속해있으므로 속해있다고 볼 수 있지만 상대적인 층위를 말하는 것입니다), if 조건문에 속해있습니다. 이 때문에 if문이 일 때에만 i = i + 1 코드가 실행됩니다.

처음에 반복문이 실행될 때 어떠한 값부터 출발하셨는지 정확하게 모르겠지만, 예를 들어 i = 1부터 시작했다고 가정합시다. 그러면 i2의 배수도 아니고 3의 배수도 아니기 때문에, if문에 들어가지 않습니다. 그러면 sum = sum + i, i = i + 1의 코드가 실행되지 않고, 그냥 i = 1로 계속 남아있습니다. 그러고 나서 다시 반복문의 조건 부분으로 들어가는데, 똑같이 i = 1이기 때문에 이것이 반복됩니다. 그래서 아무것도 출력되지 않는 것입니다.

반면 <1>번 case에서는 i = i + 1이 반복문에 속해있기 때문에 반복문이 실행될 때마다 조건문에 관계 없이 i = i + 1이 실행되어, 반복문이 잘 작동합니다. 이 때문에 원하는 결과값을 얻을 수 있었을 것입니다.

좋은 질문해주셔서 감사합니다~

관련 질문
파이썬 프로그래밍의 힘>제어문>이상한 수학 문제 I
2017년 10월 18일 작성
SEONGHYEON YUNSEONGH..SEONGHYEON YUN
답변 335 조회
파이썬 프로그래밍의 힘>제어문>이상한 수학 문제 I
2018년 9월 5일 작성
SamlaSamla
답변 177 조회
파이썬 프로그래밍의 힘>제어문>이상한 수학 문제 I
2019년 1월 28일 작성
김지윤김지윤
답변 528 조회