1학년 / 2학기 / AI-R-PY / 2강

3주차: 조건문, 반복문과 함수

이번 강의에서 배울 것

  • 비교식과 논리식을 조합해 조건을 표현할 수 있다.
  • if, elif, else로 실행 흐름을 나눌 수 있다.
  • try, except로 예상되는 오류에 대응할 수 있다.
  • for, while, break, continue를 상황에 맞게 사용할 수 있다.
  • 매개변수와 반환값이 있는 함수를 정의할 수 있다.
  • 지역 변수와 전역 변수의 범위를 구분할 수 있다.

학습 경로

이전: 2주차 · 자료형과 컬렉션 · 다음: 4주차 · 파일 입출력과 Pandas

범위: 3주차 슬라이드 3–40

단원 도입

핵심 포인트중요도이렇게 확인한다
if·elif는 처음 참이 된 블록 하나만 실행★★★조건 순서를 바꿨을 때 결과 예측하기
range(start, stop, step)은 stop을 포함하지 않음★★★list(range(2, 20, 3)) 쓰기
break vs continue★★★반복문 출력 결과 쓰기
print vs return, return 없으면 None★★함수 결과를 변수에 넣었을 때의 값
지역 변수 vs 전역 변수★★함수 안팎의 x 출력 결과
=(할당) vs ==(비교)★조건식 오류 찾기

형광펜 읽는 법: 노랑 핵심 정의·결론 · 빨강 헷갈리기 쉬운 구분·함정 · 파랑 외워야 할 순서·목록

PART 1 · 조건

비교 연산자

3p~4p

비교 연산의 결과는 항상 True 또는 False(자료형 bool)다.

연산자의미예시
<, >작다, 크다3 > 2 → True
<=, >=작거나 같다, 크거나 같다3 >= 3 → True
==값이 같다3 == 2 → False
!=값이 다르다3 != 2 → True

조건에 따라 분기하기

5p~11p

if는 조건이 참일 때 들여쓴 블록을 실행한다. 여러 조건은 위에서 아래로 검사하며, 처음 참이 된 블록 하나만 실행한다.

number = float(input("숫자를 입력하세요: "))
 
if number > 0:
    print("양수")
elif number == 0:
    print("0")
else:
    print("음수")
구조적합한 상황
if조건이 참일 때만 작업
if ... else두 경우 중 하나를 반드시 선택
if ... elif ... else서로 배타적인 여러 경우 중 하나를 선택
중첩 if바깥 조건이 참일 때 세부 조건을 다시 검사

예외 처리

12p

예외 처리는 실행 중 발생할 수 있는 오류를 예상하고 프로그램이 적절히 대응하게 한다.

raw = input("화씨 온도를 입력하세요: ")
 
try:
    fahrenheit = float(raw)                       # 실패할 수 있는 코드
    celsius = (fahrenheit - 32.0) * 5.0 / 9.0
except ValueError:                                # 숫자로 못 바꿨을 때
    print("숫자를 입력해야 합니다.")
else:                                             # 오류 없이 끝났을 때만
    print(f"섭씨 온도: {celsius:.1f}℃")

논리 연산자

13p~16p

연산자참이 되는 경우핵심
and양쪽이 모두 참조건을 좁힌다
or하나 이상 참조건을 넓힌다
not원래 조건이 거짓결과를 뒤집는다
age = 21
has_id = True
 
if age >= 19 and has_id:
    print("입장 가능")      # → 입장 가능

not → and → or 순서로 계산된다. 복잡한 조건은 괄호로 의도를 분명하게 표현한다.

PART 2 · 반복

for 반복문과 range

17p~20p

for는 문자열, 리스트, 튜플처럼 반복 가능한 객체의 요소를 하나씩 꺼내 실행한다.

numbers = [6, 5, 3, 8, 4, 2, 5, 4, 11]
total = 0
 
for number in numbers:
    total += number          # total = total + number
 
print(total)  # → 48

range(start, stop, step)은 정수의 흐름을 만든다. stop은 포함하지 않는다.

print(list(range(10)))        # → [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(range(2, 8)))      # → [2, 3, 4, 5, 6, 7]
print(list(range(2, 20, 3)))  # → [2, 5, 8, 11, 14, 17]
print(list(range(5, 0, -1)))  # → [5, 4, 3, 2, 1]

인덱스와 값이 모두 필요하다면 range(len(...))보다 enumerate()가 명확하다.

genres = ["pop", "rock", "jazz"]
 
for index, genre in enumerate(genres, start=1):
    print(index, genre)
# → 1 pop
# → 2 rock
# → 3 jazz

while, break와 continue

21p~26p

while은 조건이 참인 동안 반복한다. 반복을 끝낼 수 있도록 조건에 쓰인 값이 반드시 변해야 한다.

n = 10
total = 0
i = 1
 
while i <= n:
    total += i
    i += 1        # 이 줄이 없으면 무한 반복
 
print(total)  # → 55
명령동작
break현재 반복문 전체를 즉시 종료
continue현재 회차의 나머지만 건너뛰고 다음 회차로 이동
for char in "string":
    if char == "i":
        continue
    print(char, end=" ")
# → s t r n g        ("i"만 건너뜀)
 
for char in "string":
    if char == "i":
        break
    print(char, end=" ")
# → s t r            ("i"에서 반복 자체가 끝남)

PART 3 · 함수

함수 정의와 반환값

27p~30p

함수는 반복되는 작업에 이름을 붙인 코드 단위다. 매개변수로 입력을 받고 return으로 결과를 돌려줄 수 있다.

def absolute_value(number):
    """숫자의 절댓값을 반환한다."""
    if number >= 0:
        return number
    return -number
 
print(absolute_value(-4))  # → 4
def show(x):
    print(x * 2)
 
result = show(3)   # 화면에 6이 찍힘
print(result)      # → None

기본 인자, 키워드 인자와 가변 인자

31p~35p

def greet(name, message="좋은 아침입니다!"):
    return f"안녕하세요, {name}. {message}"
 
print(greet("Kate"))                              # → 안녕하세요, Kate. 좋은 아침입니다!
print(greet("Bruce", message="잘 지내세요?"))       # → 안녕하세요, Bruce. 잘 지내세요?
print(greet(message="반갑습니다!", name="Monica"))  # → 안녕하세요, Monica. 반갑습니다!
종류정의호출특징
위치 인자def f(a, b)f(1, 2)순서대로 대응
키워드 인자f(b=2, a=1)이름으로 대응, 순서 무관
기본 인자def f(a, b=10)f(1)생략하면 기본값
가변 인자def f(*args)f(1, 2, 3)여러 값을 튜플로 모음
def greet_all(*names):
    for name in names:
        print(f"안녕하세요, {name}")
 
greet_all("Monica", "Luke", "Steve", "John")

*names는 전달된 여러 위치 인자를 하나의 튜플 ("Monica", "Luke", "Steve", "John")로 모은다.

함수 연습: 사칙연산 계산기

36p~37p

def calculate(left, right, operation):
    if operation == 1:
        return left + right
    if operation == 2:
        return left - right
    if operation == 3:
        return left * right
    if operation == 4:
        if right == 0:
            raise ValueError("0으로 나눌 수 없습니다.")
        return left / right
    raise ValueError("operation은 1~4여야 합니다.")
 
print(calculate(8, 2, 4))  # → 4.0

변수의 범위

38p~40p

함수 안에서 만든 변수는 기본적으로 지역 변수, 함수 밖에서 만든 변수는 전역 변수다.

x = 5
 
def show_scope():
    x = 10                 # 새 지역 변수 x (전역 x와 다른 것)
    print("지역 x:", x)
 
show_scope()          # → 지역 x: 10
print("전역 x:", x)  # → 전역 x: 5

값을 인자로 받고 결과를 반환하는 설계를 우선한다.

counter = 0
 
def increment(value, amount=2):
    return value + amount
 
counter = increment(counter)   # → counter는 2

정답과 해설

1. B와 C가 모두 출력된다. if를 두 번 따로 썼으므로 두 조건을 각각 검사한다. elif였다면 B만 출력된다.

2. 변환 실패. int("3.5")는 소수점이 있는 문자열이라 ValueError가 난다.

3. [10, 7, 4, 1]. step이 음수면 줄어들며, stop인 0은 포함하지 않는다.

4. 1, 3. 2와 4는 continue로 건너뛰고, 5에서 break로 반복이 끝나 출력되지 않는다.

5. 6, 10, 4.

플래시카드

3주차 — if·elif·else에서 실행되는 블록은 몇 개인가?

처음 참이 된 블록 하나만. 그래서 범위 조건은 좁은 조건(큰 값)부터 검사한다. if를 여러 번 따로 쓰면 참인 것이 모두 실행된다.

3주차 — try / except / else / finally의 실행 순서는?

try 실행 → 오류가 나면 except, 없으면 else → finally는 항상 마지막에 실행.

3주차 — if x == 1 or 2:가 항상 참인 이유는?

(x == 1) or 2로 해석되고 2는 참이기 때문. x == 1 or x == 2 또는 x in (1, 2)로 쓴다.

3주차 — range(2, 20, 3)의 값은?

2, 5, 8, 11, 14, 17. stop(20)은 포함하지 않는다.

3주차 — break와 continue의 차이는?

break는 가장 가까운 반복문 전체를 끝내고, continue는 현재 회차의 나머지만 건너뛰고 다음 회차로 간다.

3주차 — print와 return의 차이는?

print는 화면에 보여 줄 뿐이고, return은 호출한 곳에 값을 돌려준다. return이 없는 함수는 None을 반환한다.

3주차 — 매개변수와 인자의 차이는?

매개변수는 함수 정의의 이름, 인자는 호출할 때 넘기는 실제 값.

3주차 — *names로 받은 값의 자료형은?

튜플. 전달된 여러 위치 인자를 하나로 모은다.

3주차 — 함수 안에서 x = 10을 하면 전역 x가 바뀌는가?

아니다. 대입하는 순간 새 지역 변수가 생긴다. 전역을 바꾸려면 global 선언이 필요하지만, 인자와 반환값을 쓰는 설계가 낫다.

핵심 점검

  • 비교 연산의 결과 자료형은 이다.
  • 여러 분기 중 처음 참이 된 블록 실행된다.
  • range(2, 8)의 마지막 값은 이다.
  • continue는 현재 회차만 건너뛰고, break는 를 끝낸다.
  • return이 없는 함수는 을 반환한다.
  • 기본값이 있는 매개변수는 기본값이 없는 매개변수 에 둔다.
  • 함수 안에서 만든 변수는 기본적으로 이다.
오늘도 한 걸음 앞으로.

내용을 이해했다면 학습 완료를 체크해 주세요.

학습 기록은 현재 브라우저에 저장됩니다.
HJS / STUDY한지석