인터넷

파이썬 프로그래밍에서 제어문은 무엇이며, 어떤 종류가 있나요? 4강

idcjw 2025. 8. 30. 09:36
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."



 

파이썬 프로그래밍에서 제어문은 무엇이며, 어떤 종류가 있나요?

파이썬 프로그래밍의 제어문은 프로그램의 흐름을 제어하는 문법으로, 크게 조건문과 반복문 두 가지 가 있습니다.

💡 조건문과 반복문은 각각 어떤 상황에서 사용되나요?

  • 조건문: '만약 돈이 있으면 택시를 타고, 돈이 없으면 걸어간다'와 같이 특정 조건에 따라 다른 동작을 수행할 때 사용됩니다.
  • 반복문: '나무를 10번 찍는다'처럼 많은 일들을 반복적으로 수행해야 할 때 사용됩니다.

 

이 콘텐츠는 파이썬 프로그래밍의 핵심인 제어문(조건문, 반복문)을 쉽고 명확하게 설명하여, 코드가 어떻게 동작하는지 그 흐름을 완벽하게 이해하도록 돕습니다. '돈이 있으면 택시를 타고, 없으면 걸어간다'와 같은 일상적인 예시부터 스크래치 코드, 그리고 디버깅을 통한 한 줄씩 코드 실행 과정까지 시각적으로 보여주며 초보자도 직관적으로 파이썬의 논리 구조를 파악할 수 있게 합니다. 특히, if, for, while 문법의 기본 구조와 함께 break, continue, range, 리스트 내포 등 실용적인 활용법까지 다루어 실제 코딩에 바로 적용 가능한 실질적인 문제 해결 능력을 길러줍니다.

 

1. 파이썬 제어문: 조건문과 반복문 소개

  1. 제어문의 종류: 파이썬 프로그래밍의 제어문은 크게 조건문반복문 두 가지로 나뉜다.
  2. 조건문: '만약 돈이 있으면 택시를 타고, 없으면 걸어간다'와 같이 특정 조건에 따라 다른 동작을 수행할 때 사용한다.
  3. 반복문: 많은 작업을 반복적으로 수행해야 할 때 사용한다.

 

2. 조건문 (If 문)

 

2.1. 조건문의 기본 개념 및 순서도

  1. 일상생활 예시: '돈이 있으면 택시를 타고, 돈이 없으면 걸어간다'와 같이 일상에서 많이 사용되는 '무엇이 있으면 무엇을 하고, 없으면 어떻게 한다'는 표현이 조건문의 기본 개념이다.
  2. 순서도 표현:
  3. 시작점에서 다이아몬드 형태로 '돈이 있는가?'를 묻는다.
  4. '참(True)'이면 '택시를 탄다'로, '거짓(False)'이면 '걸어간다'로 이어진다.
  5. 이러한 순서도는 프로그래밍 코드로 훨씬 간단하고 간결하게 표현할 수 있다.

 

2.2. 스크래치 코드를 통한 조건문 이해

  1. 스크래치 코드 활용: 초등학생 등 파이썬에 익숙하지 않은 사람들을 위해 스크래치 코드를 먼저 제시한다.
  2. 스크래치 예시:
  3. '머니(money)' 변수를 'True'로 설정한다.
  4. '만약 머니가 True이면 택시를 타고 가라'고 지시하고, '아니면 걸어가라'고 지시한다.
  5. '머니'가 True이므로 '택시를 타고 가라'는 선택이 실행된다.

 

2.3. 파이썬 If 문 실습 및 기본 구조

  1. 불 자료형 활용: 'money = True'와 같이 불(Boolean) 자료형을 변수에 할당한다.
  2. If 문 작성:
  3. if money: 구문은 'money' 변수가 True이면 다음 코드를 실행하라는 의미이다.
  4. print('택시를 타고')는 'money'가 True일 때 실행된다.
  5. else: 구문은 'money'가 False일 때 실행되며, print('걸어가라')가 실행된다.
  6. 조건문의 구조: if 뒤의 조건이 True이면 바로 밑의 코드가 실행되고, False이면 else 구문 밑의 코드가 실행되는 구조이다.

 

2.4. If 문에서의 들여쓰기 중요성

  1. 들여쓰기 규칙: if 문 아래의 코드는 반드시 들여쓰기를 해야 한다.
  2. 오류 발생: 들여쓰기가 잘못되면 'IndentationError'라는 문법 오류가 발생한다.
  3. 탭(Tab) 사용: 파이썬에서는 키보드의 '탭' 키를 눌러 들여쓰기를 맞춰야 문법에 맞게 코드를 실행할 수 있다.
  4. 필수 사항: 들여쓰기 오류를 피하고, 들여쓰기는 반드시 해야 한다.

 

2.5. If 문과 불 자료형 및 비교 연산자

  1. 조건식의 결과: if 뒤에 오는 조건식은 결국 불 자료형(True 또는 False)으로 평가된다.
  2. 값의 참/거짓:
  3. 값이 있는 것은 참(True)으로, 없는 것은 거짓(False)으로 인식된다.
  4. 예를 들어, if 1:과 같이 숫자가 들어가도 참으로 인식되어 다음 코드가 실행된다.
  5. 비교 연산자: if 문 뒤에 비교 연산자를 사용하여 조건을 만들 수 있다.
  6. 크다/작다: a > b, a < b (예: 4 > 1은 참)
  7. 같다: a == b (등호 두 개 사용)
  8. 다르다: a != b (느낌표와 등호 사용)
  9. 크거나 같다/작거나 같다: a >= b, a <= b (부등호 먼저, 등호 나중)
  10. 실습 예시:
  11. a = 4, b = 1일 때 if a > b:는 참이므로 '택시를 타고 가라'가 출력된다.
  12. if a < b:는 거짓이므로 '걸어가라'가 출력된다.
  13. if a <= b:는 참이므로 '택시를 타고 가라'가 출력된다.
  14. 결론: 비교 연산자는 결국 True 또는 False를 만들어 if 문 안에서 어떤 코드를 실행할지 결정한다.

 

2.6. 논리 연산자 (and, or, not)

  1. or (또는 |):
  2. money = 2000, card = True일 때 if money < 3000 or card:를 실행한다.
  3. money < 3000은 참(True)이고, card는 참(True)이다.
  4. or는 양쪽 조건 중 하나라도 참이면 전체가 참이 된다.
  5. 예시: False or TrueTrue로 평가되어 '택시를 타고 가라'가 출력된다.
  6. 양쪽 모두 거짓일 때만 전체가 거짓이 된다.
  7. | 기호도 or와 동일한 효과를 낸다.
  8. and (또는 &):
  9. and는 양쪽 조건 모두 참이어야 전체가 참이 된다.
  10. 둘 중 하나라도 거짓이면 전체가 거짓이 된다.
  11. 예시: True and FalseFalse로 평가되어 '걸어가라'가 출력된다.
  12. True and True일 때만 '택시를 타고 가라'가 출력된다.
  13. & 기호도 and와 동일한 효과를 낸다.
  14. not:
  15. not은 뒤에 오는 값의 반대를 의미한다.
  16. not TrueFalse가 되고, not FalseTrue가 된다.
  17. 예시: if not False:True로 평가되어 '택시를 타고 가라'가 출력된다.

 

2.7. in과 not in 연산자

  1. in:
  2. 리스트, 튜플, 문자열 등 여러 개의 자료형이 있는 경우, 특정 값이 그 안에 포함되어 있는지 확인할 때 사용한다.
  3. 예시: if 1 in [1, 2, 3]:은 1이 리스트 안에 있으므로 참(True)이 되어 '택시를 타고 가라'가 출력된다.
  4. not in:
  5. in의 반대 개념으로, 특정 값이 자료형 안에 포함되어 있지 않은지 확인할 때 사용한다.
  6. 예시: if 1 not in [1, 2, 3]:은 1이 리스트 안에 있으므로 거짓(False)이 되어 '걸어가라'가 출력된다.
  7. not inin은 별도의 기호가 없다.

 

2.8. pass 키워드

  1. pass의 역할: 조건문 내에서 아무 일도 하지 않게 설정하고 싶을 때 사용한다.
  2. 동작 방식: pass 구문은 말 그대로 해당 부분을 그냥 지나가게(통과하게) 한다.
  3. 예시: if True: pass는 조건이 참이지만 아무 동작 없이 다음 코드로 넘어간다.

 

2.9. elif를 이용한 다중 조건문

  1. 다중 조건의 필요성: 조건이 두 가지만 있는 것이 아니라 여러 개로 나뉠 때 사용한다.
  2. elif의 추가: ifelse 사이에 elif (else if의 줄임말)를 추가하여 여러 조건을 검사할 수 있다.
  3. 실행 흐름:
  4. if 조건이 거짓(False)이면 다음 elif 조건으로 넘어간다.
  5. elif 조건이 참(True)이면 해당 코드를 실행하고, 나머지 elifelse는 실행하지 않고 조건문을 빠져나간다.
  6. 모든 ifelif 조건이 거짓이면 마지막 else 구문이 실행된다.
  7. 예시:
  8. pocket = ['money', 'card']에서 if 'money' in pocket:은 참이므로 '택시를 타고 가라'가 실행된다.
  9. 만약 'money'가 없고 'card'만 있다면, elif 'card' in pocket:이 참이 되어 '택시를 타고 가라'가 실행된다.
  10. 모든 조건이 거짓일 경우, else 구문이 실행된다.

 

2.10. 조건부 표현식 (Conditional Expression)

  1. 간결한 표현: 여러 줄로 작성해야 하는 조건문을 한 줄로 간결하게 표현하는 방법이다.
  2. 기본 구조: [성공했을 때의 값] if [조건식] else [실패했을 때의 값]
  3. 예시:
  4. 기존 방식:

```python score = 70 if score >= 60: message = "success" else: message = "failure" print(message) # success ```

 

  1. 조건부 표현식:

```python score = 70 message = "success" if score >= 60 else "failure" print(message) # success ```

 

  1. 주의사항: else 뒤에 값을 반드시 써야 한다. 그렇지 않으면 오류가 발생한다.
  2. 다른 언어와의 비교: 다른 언어에서는 삼항 연산자(Ternary Operator)라고 부르며 물음표(?)를 사용하기도 하지만, 파이썬에서는 이와 같은 방식으로 표현한다.

 

3. 반복문 (Loop)

 

3.1. 반복문의 기본 개념 및 순서도

  1. 반복의 필요성: 프로그래밍에서는 나무를 10번 찍거나, 메일을 1000통 보내는 등 반복적으로 수행해야 하는 작업이 많다.
  2. 반복문의 역할: 이러한 반복적인 작업을 효율적으로 처리하기 위해 반복문을 사용한다.
  3. 순서도 표현:
  4. '찍은 횟수가 10번 이하인가?'라는 조건을 검사한다.
  5. 조건이 참(True)이면 '나무를 찍는다'를 수행하고, '찍은 횟수'를 1 증가시킨다.
  6. 이 과정을 반복하다가 '찍은 횟수'가 10번을 넘으면 조건이 거짓(False)이 되어 반복을 종료한다.
  7. 스크래치 코드 활용: 스크래치에서도 '찍은 횟수가 10번 이하일 때까지 반복하기' 블록을 통해 반복문을 구현할 수 있다.

 

3.2. while 문

 

3.2.1. while 문의 기본 구조 및 실습

  1. while 문의 종류: 파이썬의 반복문에는 whilefor 두 가지가 있다.
  2. 기본 구조: while [조건문]: 형태로 작성하며, 조건문은 불 자료형(True/False)으로 평가되어야 한다.
  3. 들여쓰기: while 문 아래의 수행할 코드는 반드시 들여쓰기를 해야 한다.
  4. 실습 예시:

```python tree_hit = 0 while tree_hit < 10: tree_hit = tree_hit + 1 print("나무를 %d번 찍었습니다." % tree_hit) if tree_hit == 10: print("나무 넘어갑니다.") ```

 

  1. 증감 연산자: 파이썬에서는 ++와 같은 증감 연산자를 지원하지 않으며, tree_hit = tree_hit + 1 또는 tree_hit += 1과 같이 명시적으로 작성해야 한다.

 

3.2.2. 디버깅을 통한 while 문 이해

  1. 디버깅 기능: 비주얼 스튜디오 코드의 디버깅 기능을 활용하여 코드가 한 줄씩 어떻게 실행되는지 확인할 수 있다.
  2. 브레이크 포인트: 코드 왼쪽에 빨간 점을 찍어 브레이크 포인트(Break Point)를 설정하면, 디버깅 시 해당 지점에서 실행이 멈춘다.
  3. '스텝 오버': '스텝 오버(Step Over)' 기능을 사용하여 한 줄씩 코드를 실행하며 변수 값의 변화와 코드 흐름을 추적할 수 있다.
  4. while 문의 동작:
  5. while 뒤의 조건이 True인 동안 while 문 안의 코드를 반복적으로 실행한다.
  6. 조건이 False가 되면 while 문을 빠져나간다.
  7. 예시에서 tree_hit이 10이 되면 if tree_hit == 10 조건이 참이 되어 '나무 넘어갑니다.'가 출력되고, tree_hit이 11이 되면 while tree_hit < 10 조건이 거짓이 되어 반복문이 종료된다.

 

3.2.3. break 키워드

  1. break의 역할: 반복문(예: while 문)을 강제로 빠져나올 때 사용한다.
  2. 실습 예시:

```python coffee = 10 money = 300 while money: # money가 0이 아닌 이상 True로 간주 coffee = coffee - 1 print("남은 커피의 양은 %d개입니다." % coffee) if not coffee: # coffee가 0이 되면 True print("커피가 다 떨어졌습니다.") break ```

 

  1. 동작 방식:
  2. while money:money가 0이 아닌 한 계속 True로 평가되어 무한 반복될 수 있다.
  3. 하지만 if not coffee: (커피가 0개가 되면) 조건이 참이 되면 break 문이 실행된다.
  4. break를 만나면 while 문의 조건이 여전히 True이더라도 즉시 반복문을 종료하고 빠져나간다.

 

3.2.4. continue 키워드

  1. continue의 역할: 반복문 안에서 continue를 만나면, 그 이후의 코드를 실행하지 않고 즉시 반복문의 맨 처음으로 돌아가 다음 반복을 시작한다.
  2. 실습 예시:

```python a = 0 while a < 10: a = a + 1 if a % 2 == 0: # a가 짝수이면 continue print(a) # 홀수만 출력 ```

 

  1. 동작 방식:
  2. a가 짝수일 때 (a % 2 == 0이 True일 때) continue가 실행된다.
  3. continue를 만나면 print(a) 구문은 실행되지 않고, while 문의 맨 처음으로 돌아가 다음 a 값을 가지고 반복을 계속한다.
  4. 결과적으로 홀수만 출력된다.

 

3.2.5. 무한 루프 (Infinite Loop)

  1. 무한 루프의 발생: while True:와 같이 while 문의 조건이 항상 참(True)인 경우 무한 루프가 발생한다.
  2. 종료 방법: 무한 루프는 Ctrl + C 키를 눌러 강제로 종료할 수 있다.

 

3.3. for 문

 

3.3.1. for 문의 기본 구조

  1. 기본 구조: for [변수] in [리스트/튜플/문자열]: 형태로 작성한다.
  2. 반복 대상: in 뒤에는 리스트, 튜플, 문자열 등 여러 요소를 담고 있는 자료형(주머니)이 온다.
  3. 변수의 역할: in 앞에 있는 변수(예: i)는 반복 대상에서 요소를 하나씩 꺼내 담는 그릇 역할을 한다.
  4. 동작 방식: for 문은 반복 대상의 요소를 순서대로 하나씩 꺼내 변수에 담고, 그 변수를 활용하여 for 문 안의 코드를 실행한다. 모든 요소를 다 사용하면 반복을 종료한다.
  5. 실습 예시:

```python test_list = ['one', 'two', 'three'] for i in test_list: print(i) ```

 

  • i에 'one', 'two', 'three'가 순서대로 담겨 출력된다.

 

3.3.2. for 문의 다양한 활용

  1. 리스트 안에 튜플이 있는 경우: 리스트 안에 튜플이 들어있어도 for 문은 하나씩 요소를 빼온다.
  2. 튜플 언패킹: 튜플 요소를 꺼낼 때 (first, last)와 같이 여러 변수에 담아 각각 활용할 수 있다.
  • 예시: a = [(1, 2), (3, 4), (5, 6)]
  • for (first, last) in a:를 사용하면 first에는 튜플의 첫 번째 요소, last에는 두 번째 요소가 담긴다.
  • print(first)print(last)를 통해 각각의 값을 출력할 수 있다.

 

3.3.3. for 문과 조건문의 결합

  1. 종합 예시: for 문과 if 문을 함께 사용하여 학생들의 점수를 처리하는 예시를 살펴본다.

```python marks = [90, 25, 67, 45, 80] number = 0 for mark in marks: number = number + 1 if mark >= 60: print("%d번 학생은 합격입니다." % number) else: print("%d번 학생은 불합격입니다." % number) ```

 

  1. 동작 방식:
  2. marks 리스트에서 점수(mark)를 하나씩 꺼내 mark 변수에 담는다.
  3. number 변수는 학생 번호를 나타내며, 반복할 때마다 1씩 증가한다.
  4. if mark >= 60: 조건에 따라 합격/불합격 메시지를 출력한다.
  5. 파이썬 for 문의 특징:
  6. 다른 언어의 for 문과 달리, 파이썬의 for 문은 리스트와 같은 자료형이 있으면 자동으로 순서대로 요소를 하나씩 빼온다.
  7. 별도의 인덱스 증가(예: i++)가 필요 없다.
  8. 이는 다른 언어의 '향상된 for 문' 또는 'for-each'와 유사하다.

 

3.3.4. for 문과 continue

  1. for 문에서의 continue: while 문에서와 동일하게, continue를 만나면 현재 반복을 중단하고 다음 반복으로 넘어간다.
  2. 간결한 표현: if 문이 한 줄일 경우, if 조건: 실행문 형태로 한 줄에 작성할 수 있다.
  3. 실습 예시:

```python marks = [90, 25, 67, 45, 80] number = 0 for mark in marks: number = number + 1 if mark < 60: continue # 60점 미만이면 다음 반복으로 넘어감 print("%d번 학생 축하합니다. 합격입니다." % number) ```

 

  1. 동작 방식:
  2. mark가 60점 미만일 경우 (mark < 60이 True) continue가 실행된다.
  3. continue가 실행되면 print 구문은 건너뛰고 다음 학생의 점수로 넘어간다.
  4. 결과적으로 60점 이상인 학생의 합격 메시지만 출력된다.

 

3.3.5. range() 함수

  1. range()의 역할: 특정 범위의 숫자를 자동으로 생성하여 리스트처럼 사용할 수 있게 해주는 내장 함수이다.
  2. 사용법: range(시작 숫자, 끝 숫자) 형태로 사용한다.
  3. 시작 숫자는 포함(이상)되고, 끝 숫자는 포함되지 않는다(미만).
  4. 예시: range(1, 11)은 1부터 10까지의 숫자를 생성한다.
  5. for 문과의 활용: for i in range(1, 11):과 같이 사용하여 특정 횟수만큼 반복하거나, 순차적인 숫자를 다룰 때 유용하다.
  6. 합계 계산 예시:

```python sum = 0 for i in range(1, 11): # 1부터 10까지 반복 sum = sum + i print(sum) # 55 (1부터 10까지의 합) ```

 

  1. 디버깅을 통한 이해: range() 함수가 생성한 숫자가 i에 하나씩 담겨 sum에 더해지는 과정을 디버깅으로 확인할 수 있다.
  2. 활용성: 리스트를 일일이 작성하기 어려울 때 range() 함수를 주로 사용한다.

 

3.3.6. 이중 for 문 (Nested For Loop)

  1. 이중 반복의 필요성: 반복문 안에 또 다른 반복문이 중첩되어 사용될 때 이중 반복문이라고 한다.
  2. 구구단 예시: 구구단을 출력할 때 이중 for 문을 활용할 수 있다.

```python for i in range(2, 10): # 2단부터 9단까지 (바깥쪽 for문) for j in range(1, 10): # 각 단의 1부터 9까지 (안쪽 for문) print(i * j, end=" ") # 결과 출력 후 공백으로 구분 print('') # 한 단이 끝나면 줄바꿈 ```

 

  1. 변수의 의미: ij는 임시 변수로, range()에서 하나씩 꺼낸 값을 담는 그릇 역할을 한다. 변수 이름은 자유롭게 지정할 수 있다.
  2. end 옵션: print() 함수에 end=" " 옵션을 사용하면, 출력 후 기본 줄바꿈 대신 지정된 문자열(여기서는 공백)을 붙여 다음 출력이 같은 줄에 이어지게 한다.
  3. 이중 for 문의 실행 흐름:
  4. 바깥쪽 for 문: i에 첫 번째 값(예: 2)이 담긴다.
  5. 안쪽 for 문: i가 고정된 상태에서 jrange(1, 10)의 모든 값(1부터 9까지)을 순서대로 반복한다.
  6. 안쪽 for 문이 완전히 끝나야 (모든 j 값이 처리되어야) 바깥쪽 for 문으로 돌아와 i의 다음 값(예: 3)을 가져온다.
  7. 이 과정이 반복되어 2단부터 9단까지의 구구단이 출력된다.

 

3.4. 리스트 내포 (List Comprehension)

  1. 리스트 내포의 목적: 리스트를 편리하고 간결하게 생성하기 위해 사용한다.
  2. 기본 구조: [표현식 for 변수 in 반복 가능한 객체]
  • 표현식: 리스트에 담고자 하는 결과 값 (예: num * 3)
  • 변수: 반복 가능한 객체에서 하나씩 꺼내 담는 변수 (예: num)
  • 반복 가능한 객체: 리스트, 튜플, range() 등 (예: a)
  1. 조건문 추가: [표현식 for 변수 in 반복 가능한 객체 if 조건문]
  • if 뒤에 조건을 추가하여 특정 조건에 맞는 요소만 리스트에 포함시킬 수 있다.
  • 예시: [num * 3 for num in a if num % 2 == 0]a 리스트의 짝수에만 3을 곱하여 리스트에 담는다.
  1. 이중 for 문과 조건문 결합: [표현식 for 변수1 in 객체1 for 변수2 in 객체2 if 조건문] 형태로 이중 for 문과 조건문을 함께 사용할 수 있다.
  • 결국 리스트에 추가하고자 하는 표현식을 가장 앞에 쓰고, 그 뒤에 for 문과 if 문을 순서대로 작성하는 방식이다.

 

4. 제어문 요약 및 마무리

  1. 조건문:
  2. if 문: 특정 조건(불 자료형)에 따라 코드를 실행한다.
  3. else: if 조건이 거짓일 때 실행된다.
  4. 들여쓰기: 반드시 맞춰야 한다.
  5. 조건식: 비교 연산자, and, or, not, in, not in 등을 사용할 수 있다.
  6. 다중 조건: elif를 사용하여 여러 조건을 추가할 수 있다.
  7. 조건부 표현식: 한 줄로 간결하게 조건문을 표현하는 방식이다.
  8. 반복문:
  9. while 문: 조건이 참인 동안 코드를 반복 실행한다.
  10. break: 반복문을 강제로 탈출한다.
  11. continue: 현재 반복을 중단하고 다음 반복으로 넘어간다.
  12. 무한 루프: 조건이 항상 참일 때 발생하며, Ctrl + C로 종료한다.
  13. for 문: 리스트, 튜플, 문자열 등의 요소를 하나씩 꺼내 반복 수행한다.
  14. range() 함수: 특정 범위의 숫자를 생성하여 for 문과 함께 사용한다.
  15. 이중 반복문: 반복문 안에 또 다른 반복문이 중첩된 형태로, 구구단 출력 등에 활용된다.
  16. 리스트 내포: 리스트를 간결하게 생성하는 방법이다.

 

파이썬 5강 바로가기

반응형