컴퓨터/정보>중등 정보>제어문과 반복 루프
개념 정리

제어문과 반복 루프

단원 개요
프로그램의 실행 흐름을 분기하는 조건문(if-elif-else), 단락 평가(Short-circuit Evaluation), 반복 루프(for/while) 제어(break/continue) 및 리스트 컴프리헨션을 학습합니다.
선수 개념
프로그래밍 첫걸음 - 순차 실행과 코드 읽기프로그래밍 기초 - 변수와 자료형
필수 키워드:거짓(Falsy)참(Truthy)A and BA or Bfor 루프 (횟수/시퀀스 기반 반복)순회 가능한 객체(Iterable)while 루프 (조건 기반 반복)무한 루프(Infinite Loop)흐름 제어 키워드break
1

조건 분기문(if-elif-else)과 논리 연산의 단락 평가(Short-Circuit)

•
조건문 (Conditional Statement): 주어진 조건식의 평가 결과(참 True 또는 거짓 False)에 따라 실행할 코드 블록을 결정합니다.
•
파이썬에서는 숫자 0, 빈 문자열 "", 빈 리스트 [], None은 조건식에서 자동으로 거짓(Falsy)으로 평가되고, 그 외의 값이 있는 객체는 참(Truthy)으로 평가됩니다.
•
단락 평가 (Short-Circuit Evaluation):
•
논리 연산자 and(&&)와 or(||)는 왼쪽 식만으로 전체 결과가 확정되면 오른쪽 식은 아예 실행(평가)조차 하지 않고 건너뛰는 최적화 규칙입니다.
•
A and B: A가 거짓(False)이면 전체가 무조건 거짓이므로 B를 실행하지 않음. (예: if idx < len(arr) and arr[idx] == 5:에서 인덱스 범위 검사를 앞에 두어야 IndexError를 예방할 수 있습니다!)
•
A or B: A가 참(True)이면 전체가 무조건 참이므로 B를 실행하지 않음.
핵심 원리
단락 평가(Short-Circuit)를 활용한 실무 방어 코딩: 배열 조회나 나눗셈을 할 때 항상 if x != 0 and (100 / x) > 5: 또는 if user is not None and user.is_active:처럼 안전한 가드(Guard) 조건을 왼쪽에 배치해야 런타임 에러(ZeroDivisionError, NullPointerException)를 막을 수 있습니다.
2

반복문(for vs while)과 루프 제어(break, continue)

1
for 루프 (횟수/시퀀스 기반 반복):
•
리스트, 문자열, range(start, stop, step) 등 순회 가능한 객체(Iterable)에서 원소를 처음부터 끝까지 하나씩 꺼내며 정해진 횟수만큼 안전하게 반복합니다.
•
주의: range(1, 5)는 시작값 1은 포함하고 끝값 5는 포함하지 않는 반열린 구간 [1,5)[1, 5)이므로 1, 2, 3, 4 총 4번 실행됩니다.
2
while 루프 (조건 기반 반복):
•
조건식이 True인 동안 코드 블록을 계속 반복합니다. 반복 횟수를 미리 알 수 없을 때(예: 이진 탐색에서 while low <= high:, 사용자 종료 입력 대기) 유용하지만, 루프 내부에서 조건 변수를 갱신하지 않으면 무한 루프(Infinite Loop)에 빠집니다.
3
흐름 제어 키워드:
•
break: 현재 감싸고 있는 가장 가까운 반복 루프를 즉시 완전히 탈출합니다.
•
continue: 현재 반복 회차의 아래쪽 남은 코드만 건너뛰고, 루프의 다음 반복 회차(조건 검사 또는 다음 원소)로 즉시 이동합니다.
풀이

1) range(1, 10)은 n = 1부터 9까지 순회합니다.

2) 첫 번째 조건 if n % 2 == 0: continue에 의해 짝수(2, 4, 6, 8)는 모두 건너뛰고 홀수만 아래로 내려갑니다.

3) 홀수 진행 추적:

•
n = 1: total = 0 + 1 = 1
•
n = 3: total = 1 + 3 = 4
•
n = 5: total = 4 + 5 = 9
•
n = 7: 두 번째 조건 if n > 6: break가 참이 되어 7을 더하기 전에 반복문이 즉시 완전 종료됩니다!

4) 따라서 더해지는 숫자는 1, 3, 5이며 최종 total 값은 9입니다.

3

파이썬다운 코딩(Pythonic): 리스트 컴프리헨션과 enumerate/zip

•
리스트 컴프리헨션 (List Comprehension):
•
새로운 리스트를 만들 때 여러 줄의 for문과 append() 호출 대신, 대괄호 안에 선언적 수식으로 한 줄에 작성하는 문법입니다:
‘[표현식 for 변수 in 시퀀스 if 조건식]‘\text{`[표현식 for 변수 in 시퀀스 if 조건식]`}
•
예: 1부터 10까지 중 홀수의 제곱 리스트 ➔ [x**2 for x in range(1, 11) if x % 2 == 1] ➔ [1, 9, 25, 49, 81].
•
내부적으로 C언어 레벨에서 최적화되어 실행되므로 일반 for 루프에서 .append()를 반복 호출하는 것보다 가독성이 높고 실행 속도도 약 1.5~2배 빠릅니다.
•
필수 내장 이터레이터 함수:
•
enumerate(iterable): 인덱스와 원소 값을 튜플 (idx, val)로 동시에 꺼내어 range(len(arr)) 패턴을 대체합니다.
•
zip(listA, listB): 두 개 이상의 시퀀스를 나란히 묶어 같은 위치의 원소 쌍을 동시에 순회합니다.
주의할 점
2차원 배열 초기화 함정: matrix = [[0] * M] * N처럼 바깥쪽 리스트에 곱셈 연산자(* N)를 쓰면 똑같은 행 리스트의 참조 주소가 N번 복사되어, matrix[0][0] = 1만 바꿔도 모든 행의 첫 번째 열이 전부 1로 바뀌는 대형 버그가 발생합니다! 반드시 리스트 컴프리헨션 [[0] * M for _ in range(N)]으로 생성하세요.

핵심 요약

  • ✓
    논리 연산의 단락 평가(Short-Circuit)에 의해 A and B에서 A가 거짓이면 B는 아예 실행되지 않는다.
  • ✓
    break는 반복 루프 자체를 즉시 탈출하고, continue는 현재 회차의 남은 코드를 건너뛰고 다음 반복으로 넘어간다.
  • ✓
    리스트 컴프리헨션 [expr for x in iter if cond]는 일반 루프 append보다 간결하고 빠르게 새 리스트를 생성한다.
  • ✓
    2차원 리스트 생성 시 얕은 참조 복사를 막기 위해 반드시 [[0] * M for _ in range(N)] 형태를 사용해야 한다.

설명 다음에는 직접 풀어 보세요

함께 풀기와 자기 설명을 거쳐 새 문제에 도전해요. 막힌 부분은 보충하고, 다른 날 다시 기억하는지 확인할 수 있어요.

이 단원의 수업 시작하기 →
5문항 연습 세트

제어문과 반복 루프 단원 연습 문제

개념을 읽은 뒤 연습 문제로 이해한 내용을 확인해 보세요. 한 세트는 5문항이며, 답안을 제출하면 정답과 풀이를 볼 수 있습니다.

한 세트 5문항 단계별 상세 해설 시험지 PDF 인쇄 지원

참고 근거와 확인 범위

설명·예제·문제 구성 및 오류 수정 책임: 프리런. 위 자료는 표시한 주제를 확인하거나 더 읽기 위한 근거이며, 외부 기관의 공식 수업이나 감수본을 뜻하지 않습니다.

참고 자료 연결 점검: 2026-11-02. 제작 방식·검수 범위와 수정 기록에서 확인 범위를 볼 수 있습니다. 오류는 상단의 의견 보내기 또는 contact@freelearn.io로 알려 주세요.