쌩로그

[Python] 인프런 - 프로그래밍 시작하기 - 파이썬 입문 - Se05. 파이썬 흐름 제어 본문

Language/Python

[Python] 인프런 - 프로그래밍 시작하기 - 파이썬 입문 - Se05. 파이썬 흐름 제어

.쌩수. 2026. 5. 14. 23:53
반응형

목록

  1. 개요
  2. 본론
      2-1. 제어문 (if문)
      2-2. 반복문 - for문
      2-3. 반복문 - while문
  3. 요약

1. 개요

해당 포스팅은 인프런 - 프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)을 학습하고 정리한 포스팅이다.

이번 챕터에서는 파이썬 흐름 제어에 대해 정리한다.
프로그램의 실행 흐름을 제어하는 두 가지 핵심 도구인 조건문(if)반복문(for, while)을 다루며, 관계/논리 연산자부터 break/continue, for-else/while-else 구문까지 파이썬 흐름 제어의 전반적인 개념을 학습한다.

2. 본론

2-1. 제어문 (if문)

조건문은 특정 조건이 참(True)이냐 거짓(False)이냐에 따라 실행할 코드 블록을 분기하는 구문이다.

if문 기본 구조

# 기본 형식
if <조건식>:
    <참일 때 실행>
else:
    <거짓일 때 실행>

파이썬에서 True로 평가되는 값과 False로 평가되는 값은 다음과 같다.

구분 예시
True (참) 0이 아닌 수, 비어있지 않은 문자열 "abc", 비어있지 않은 리스트 [1,2,3]
False (거짓) 0, 빈 문자열 "", 빈 리스트 [], 빈 튜플 (), 빈 딕셔너리 {}
city = ""
if city:
    print("You are in:", city)
else:
    print("plz enter your city")  # city가 빈 문자열이므로 False → 이 줄 출력

city2 = "Seoul"
if city2:
    print("You are in:", city2)   # city2가 비어있지 않으므로 True → 이 줄 출력
else:
    print("plz enter your city")

관계 연산자

두 값을 비교하여 True 또는 False를 반환하는 연산자다.

연산자 의미 예시 (x=15, y=10) 결과
== 같다 x == y False
!= 다르다 x != y True
> 크다 x > y True
>= 크거나 같다 x >= y True
< 작다 x < y False
<= 작거나 같다 x <= y False
x = 15
y = 10

print(x == y)   # False
print(x != y)   # True
print(x > y)    # True
print(x >= y)   # True
print(x < y)    # False
print(x <= y)   # False

논리 연산자

여러 조건을 조합할 때 사용하는 연산자다.

연산자 의미 설명
and 그리고 두 조건 모두 참이어야 True
or 또는 두 조건 중 하나만 참이어도 True
not 부정 참/거짓을 반전
a = 75
b = 40
c = 10

print('and:', a > b and b > c)   # True and True → True
print('or:', a > b or b > c)     # True or True → True
print('not:', not a > b)         # not True → False
print(not True)                  # False
print(not False)                 # True

연산자 우선순위

산술 연산자 → 관계 연산자 → 논리 연산자 순으로 우선순위가 높다.

# 산술 > 관계 > 논리 순서로 계산
print('e1 : ', 3 + 12 > 7 + 3)          # 15 > 10 → True
print('e2 : ', 5 + 10 * 3 > 7 + 3 * 20) # 35 > 67 → False
print('e3 : ', 5 + 10 > 3 and 7 + 3 == 10) # True and True → True

다중 조건문 (elif)

조건이 여러 개인 경우 elif를 사용해 분기를 추가할 수 있다.

num = 90

if num >= 90:
    print('Grade : A')
elif num >= 80:
    print('Grade : B')
elif num >= 70:
    print('Grade : C')
else:
    print('과락')
# 출력: Grade : A

중첩 조건문

if문 안에 또 다른 if문을 넣어 세부 조건을 처리할 수 있다.

grade = 'A'
total = 95

if grade == 'A':
    if total >= 90:
        print('장학금 100%')   # 출력
    elif total >= 80:
        print('장학금 80%')
    else:
        print('장학금 50%')
else:
    print('장학금 없음')

in / not in 연산자

특정 값이 컬렉션(리스트, 집합, 딕셔너리, 튜플 등)에 포함되어 있는지 확인한다.

q = [10, 20, 30]
w = {70, 80, 90, 100}
e = {"name": "Lee", "city": "Seoul", "grade": "A"}
r = (10, 12, 14)

print(15 in q)           # False - q에 15가 없음
print(90 in w)           # True  - w에 90이 있음
print(12 not in r)       # False - r에 12가 있음
print("name" in e)       # True  - 딕셔너리의 키 검색
print("Seoul" in e.values())  # True - 딕셔너리의 값 검색

딕셔너리에 in을 사용하면 기본적으로 키(key)를 검색한다. 값(value)을 검색하려면 .values()를 명시해야 한다.

2-2. 반복문 - for문

for문은 컬렉션(iterable)의 원소를 순서대로 꺼내어 반복 처리하는 구문이다.

for문 기본 구조와 range()

# 기본 형식
for <변수> in <iterable>:
    <반복할 코드>

range() 함수는 정수 시퀀스를 생성하며 for문과 자주 함께 사용된다.

형식 설명 예시
range(n) 0부터 n-1까지 range(10) → 0~9
range(start, stop) start부터 stop-1까지 range(1, 11) → 1~10
range(start, stop, step) step 간격으로 range(0, 11, 2) → 0,2,4,6,8,10
for v1 in range(10):        # 0 ~ 9
    print('v1 is :', v1)

for v2 in range(1, 11):     # 1 ~ 10
    print('v2 is :', v2)

for v3 in range(0, 11, 2):  # 0, 2, 4, 6, 8, 10 (짝수)
    print('v3 is :', v3)

# range와 sum()을 활용한 합산
print('1 ~ 1000 Sum : ', sum(range(1, 1001)))           # 500500
print('1 ~ 1000 4의 배수의 합 : ', sum(range(4, 1001, 4)))

Iterable 자료형 순회

for문은 문자열, 리스트, 튜플, 집합, 딕셔너리 등 모든 iterable 자료형을 순회할 수 있다.

# 리스트 순회
names = ['Kim', 'Park', 'Cho', 'Lee', 'Choi', 'Yoo']
for n in names:
    print('You are : ', n)

# 문자열 순회 (한 글자씩)
word = "Beautiful"
for s in word:
    print('word : ', s)

# 딕셔너리 순회
my_info = {"name": 'Lee', "Age": 33, "City": "Seoul"}

for key in my_info:             # 키(key)를 순회
    print('key : ', my_info[key])

for v in my_info.values():      # 값(value)을 순회
    print('value : ', v)

break / continue

반복 흐름을 중간에 제어하는 키워드다.

키워드 동작
break 반복문을 즉시 종료하고 빠져나감
continue 현재 반복 회차를 건너뛰고 다음 회차로 넘어감
# break: 특정 값을 찾으면 반복 중단
numbers = [14, 3, 4, 7, 10, 24, 17, 2, 33, 15, 34, 36, 38]

for num in numbers:
    if num == 34:
        print('Found : 34!')
        break           # 34를 찾으면 반복 종료
    else:
        print('Not found : ', num)


# continue: bool 타입이면 건너뜀
lt = ["1", 2, 5, True, 4.3, complex(4)]

for v in lt:
    if type(v) is bool:
        continue        # bool이면 이 회차 건너뜀
    print("current type:", v, type(v))
    print("multiply by 2", v * 3)

for-else 구문

for문이 break 없이 정상적으로 끝까지 실행되면 else 블록이 실행된다. break로 중단되면 else는 실행되지 않는다.

numbers = [14, 3, 4, 7, 10, 24, 17, 2, 33, 15, 34, 36, 38]

for num in numbers:
    if num == 3:
        print("Found : 3")
        break           # break가 실행되면 else는 건너뜀
else:
    print("Not found : 3")  # break 없이 끝까지 돌면 실행

중첩 for문

for문 안에 또 다른 for문을 넣어 다차원 반복 처리를 할 수 있다.

# 구구단 출력 (중첩 for문 활용)
for i in range(2, 10):
    for j in range(1, 10):
        print('{:4d}'.format(i * j), end='')  # 4자리 고정폭, 줄바꿈 없이 출력
    print()  # 단(段) 바꿈

reversed()

iterable의 원소 순서를 반전시킨다. 반전된 iterator를 반환하므로 list(), tuple(), set() 등으로 변환해 사용한다.

name2 = 'Aceman'

print('Reversed', reversed(name2))        # reversed object (iterator)
print('List',     list(reversed(name2)))  # ['n', 'a', 'm', 'e', 'c', 'A']
print('Tuple',   tuple(reversed(name2)))  # ('n', 'a', 'm', 'e', 'c', 'A')
print('Set',       set(reversed(name2)))  # {'A', 'a', 'c', 'e', 'm', 'n'} (순서 없음)

2-3. 반복문 - while문

while문은 조건식이 참(True)인 동안 코드 블록을 반복 실행하는 구문이다.

while문 기본 구조

# 기본 형식
while <조건식>:
    <반복할 코드>
# 예제1: 카운트다운
n = 5
while n > 0:
    print(n)   # 5, 4, 3, 2, 1 출력
    n = n - 1  # 반드시 조건이 False가 되도록 갱신해야 무한루프를 방지

# 예제2: 리스트가 비어있지 않은 동안 반복
a = ['foo', 'bar', 'baz']
while a:
    print(a.pop())  # 'baz', 'bar', 'foo' 순으로 출력 (pop은 마지막 원소 제거 후 반환)

break / continue

for문과 동일하게 breakcontinue를 사용할 수 있다.

# break: 조건에 걸리면 반복 종료
n = 5
while n > 0:
    n -= 1
    if n == 2:
        break       # n이 2가 되면 즉시 종료
    print(n)        # 4, 3 출력 후 종료
print('Loop Ended.')


# continue: 조건에 걸리면 현재 회차 건너뜀
m = 5
while m > 0:
    m -= 1
    if m == 2:
        continue    # m이 2일 때 print를 건너뜀
    print(m)        # 4, 3, 1, 0 출력 (2는 출력 안 됨)
print('Loop Ended.')

while-else 구문

for-else와 동일한 원리로, break 없이 while 조건이 False가 되어 정상 종료되면 else 블록이 실행된다.

# break로 종료 → else 실행 안 됨
n = 10
while n > 0:
    n -= 1
    print(n)
    if n == 5:
        break       # n이 5가 되면 종료 → else 건너뜀
else:
    print('else out.')  # 실행되지 않음


# break 없이 종료 → else 실행됨
a = ['foo', 'bar', 'baz', 'qux']
s = 'kim'
i = 0

while i < len(a):
    if a[i] == s:
        break       # 찾으면 break
    i += 1
else:
    print(s, 'not found in list.')  # 'kim' not found in list. 출력

무한 루프 (while True)

while True:는 조건이 항상 참이므로 무한히 반복된다. 반드시 내부에 break 조건을 두어야 한다.

# 리스트가 빌 때까지 반복 (while True + break 패턴)
a = ['foo', 'bar', 'baz']

while True:
    if not a:       # 리스트가 비어있으면 (False이면)
        break       # 반복 종료
    print(a.pop())  # 'baz', 'bar', 'foo' 순으로 출력

while True는 서버 루프, 사용자 입력 대기, 폴링(polling) 등에서 자주 쓰이는 패턴이다. 반드시 탈출 조건(break)을 명시해야 한다.

3. 요약

구문 핵심 키워드 설명
조건문 if, elif, else 조건의 참/거짓에 따라 코드 블록 분기
관계 연산자 ==, !=, >, >=, <, <= 두 값을 비교해 True/False 반환
논리 연산자 and, or, not 조건을 조합, 산술 > 관계 > 논리 우선순위
멤버십 연산자 in, not in 컬렉션에 값 포함 여부 확인
for문 for ... in ... iterable을 순서대로 순회
while문 while <조건> 조건이 True인 동안 반복
반복 제어 break 반복문 즉시 종료
반복 제어 continue 현재 회차 건너뛰고 다음 회차 진행
else 절 for-else, while-else break 없이 정상 종료 시 else 블록 실행
무한 루프 while True 항상 참 → break로 탈출 조건 필수
  • range(start, stop, step) : for문과 함께 정수 시퀀스를 생성하는 핵심 함수
  • 딕셔너리에 in 사용 시 기본으로 를 검색, 값 검색은 .values() 필요
  • reversed() : iterable을 역순으로 순회하는 iterator 반환
  • 중첩 for문 : 이중 루프로 2차원 반복 처리 (구구단 등)
728x90
Comments