Python

[Python] 03. 제어문 ( 조건문, 반복문, 예외 처리 )

변쌤(이젠강남) 2024. 9. 28. 13:15
반응형

제어문 ( 조건문, 반복문, 예외처리 )

 

 

#  조건문 ( Conditional Statements )

조건문은 특정 조건에 따라 코드를 실행할지 여부를 결정합니다. Python의 조건문에는 if, elif, else가 사용됩니다.

 

if 문

if 문은 조건이 True일 때만 코드를 실행합니다.

x = 10
if x > 5:
    print("x는 5보다 큽니다.")

 

 

if-else 문

if 문에 이어 else를 사용하여 조건이 False일 때 실행될 코드를 지정할 수 있습니다.

x = 3
if x > 5:
    print("x는 5보다 큽니다.")
else:
    print("x는 5보다 작거나 같습니다.")

 

if-elif-else 문

여러 조건을 처리할 때 elif를 사용하여 조건을 추가할 수 있습니다.

x = 5
if x > 5:
    print("x는 5보다 큽니다.")
elif x == 5:
    print("x는 5입니다.")
else:
    print("x는 5보다 작습니다.")

 

중첩된 조건문

조건문을 중첩하여 사용할 수 있습니다.

 

x = 10
y = 20
if x > 5:
    if y > 10:
        print("x는 5보다 크고, y는 10보다 큽니다.")

 

 

 

# 반복문 (Loops)

반복문은 특정 조건을 만족할 때까지 같은 코드를 반복 실행하는 데 사용됩니다. Python에서 반복문에는 forwhile이 있습니다.

 

for 문

for 문은 주로 시퀀스(리스트, 튜플, 문자열 등)를 순회(iterate)하는 데 사용됩니다.

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

 

range() 함수와 함께 사용할 수도 있습니다.

for i in range(5):
    print(i)

 

 

while 문

while 문은 조건이 True인 동안 코드를 반복 실행합니다.

x = 0
while x < 5:
    print(x)
    x += 1

 

 

반복 제어문 (Loop Control Statements)

반복문 내에서 반복을 제어할 때 break, continue, else를 사용할 수 있습니다.

 

break 문

break 문은 반복문을 즉시 종료합니다.

 

for i in range(10):
    if i == 5:
        break
    print(i)  # 0부터 4까지만 출력

 

 

continue 문

continue 문은 현재 반복을 건너뛰고, 다음 반복으로 넘어갑니다.

 

for i in range(5):
    if i == 2:
        continue
    print(i)  # 0, 1, 3, 4 출력

 

 

else 문

else 문은 반복문이 정상적으로 종료되었을 때 실행됩니다 (즉, break에 의해 중단되지 않았을 때).

for i in range(5):
    print(i)
else:
    print("반복이 끝났습니다.")

 

 

# 예외 처리 (Exception Handling)

코드 실행 중 예외가 발생할 때 프로그램이 강제 종료되는 것을 방지하고, 예외 상황에 적절하게 대응할 수 있도록 try-except 문을 사용합니다.

 

try-except 문

try 블록에서 오류가 발생하면, except 블록이 실행됩니다.

try:
    x = 1 / 0
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")

 

 

try-except-finally 문

finally 블록은 예외 발생 여부와 관계없이 항상 실행됩니다.

try:
    x = 1 / 0
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
finally:
    print("이 코드는 항상 실행됩니다.")

 

try-except-else 문

else 블록은 예외가 발생하지 않았을 때만 실행됩니다.

try:
    x = 1 / 1
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
else:
    print("예외가 발생하지 않았습니다.")

 

 

# match 문 패턴 매칭 : 다른언어의 switch~case 와 동일 

Python 3.10부터 도입된 match 문패턴 매칭을 위한 새로운 제어 흐름 구조로, 기존의 if-elif-else 구조보다 더 간결하고 명확하게 복잡한 조건을 처리할 수 있습니다. match 문은 주로 여러 가지 패턴을 기반으로 값을 비교하고, 해당하는 패턴에 맞는 코드를 실행하는 방식으로 동작합니다. 이는 다른 언어의 switch 문과 유사하지만, 더 강력한 패턴 매칭 기능을 제공합니다.

 

복잡한 조건을 더 명확하고 간결하게 처리할 수 있으며, 특히 데이터 구조를 처리하는 데 매우 유용

 

match 문은 표현식에 대한 패턴을 나열하고, 주어진 값이 그 패턴과 일치하는지 확인한 후 해당하는 블록을 실행합니다.

match 변수_이름:
    case 패턴1:
        # 패턴1에 대한 코드 실행
    case 패턴2:
        # 패턴2에 대한 코드 실행
    case _:
        # 기본 패턴 (기타 나머지 경우)

 

예)

def check_number(x):
    match x:
        case 1:
            return "One"
        case 2:
            return "Two"
        case 3:
            return "Three"
        case _:
            return "Unknown number"

print(check_number(1))  # 출력: One
print(check_number(5))  # 출력: Unknown number

 

_는 와일드카드 패턴으로, 어떤 값이든 매칭됩니다. 이는 else와 유사한 역할

 

 

튜플 매칭

튜플과 같은 데이터 구조를 매칭할 수 있습니다. 여러 값을 한꺼번에 처리할 때 유용합니다.

 

def check_point(point):
    match point:
        case (0, 0):
            return "Origin"
        case (0, y):
            return f"On the Y-axis at y={y}"
        case (x, 0):
            return f"On the X-axis at x={x}"
        case (x, y):
            return f"Point at ({x}, {y})"
        case _:
            return "Unknown point"

print(check_point((0, 0)))    # 출력: Origin
print(check_point((3, 0)))    # 출력: On the X-axis at x=3
print(check_point((0, 4)))    # 출력: On the Y-axis at y=4
print(check_point((3, 4)))    # 출력: Point at (3, 4)

(x, 0)이나 (0, y)와 같은 패턴은 특정 값을 고정하고, 다른 값은 변수로 처리하여 그 값을 사용할 수 있게 합니다.

 

리스트 매칭

리스트의 길이나 요소를 기반으로 패턴 매칭을 할 수 있습니다.

 

def check_list(lst):
    match lst:
        case []:
            return "Empty list"
        case [x]:
            return f"Single element list with {x}"
        case [x, y]:
            return f"Two elements: {x}, {y}"
        case [x, *rest]:
            return f"First element: {x}, rest: {rest}"

print(check_list([]))           # 출력: Empty list
print(check_list([10]))         # 출력: Single element list with 10
print(check_list([10, 20]))     # 출력: Two elements: 10, 20
print(check_list([1, 2, 3, 4])) # 출력: First element: 1, rest: [2, 3, 4]

 

*rest는 리스트의 나머지 요소들을 변수 rest에 담는 역할

 

객체 매칭

match 문은 객체의 속성에 대한 매칭도 지원합니다. 객체의 특정 속성 값을 기반으로 조건을 설정할 수 있습니다.

 

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

def describe_point(point):
    match point:
        case Point(0, 0):
            return "Origin"
        case Point(x, 0):
            return f"Point on X-axis at {x}"
        case Point(0, y):
            return f"Point on Y-axis at {y}"
        case Point(x, y):
            return f"Point at ({x}, {y})"
        case _:
            return "Unknown point"

p1 = Point(0, 0)
p2 = Point(5, 0)
p3 = Point(0, 6)
p4 = Point(3, 4)

print(describe_point(p1))  # 출력: Origin
print(describe_point(p2))  # 출력: Point on X-axis at 5
print(describe_point(p3))  # 출력: Point on Y-axis at 6
print(describe_point(p4))  # 출력: Point at (3, 4)

 

match 문은 Point 객체의 속성을 매칭하여, 각각의 경우에 맞는 결과를 반환

 

 

  • 가독성: 복잡한 조건을 처리할 때 if-elif-else 구조보다 더 읽기 쉽습니다.
  • 다양한 데이터 구조 지원: 튜플, 리스트, 딕셔너리, 클래스 객체 등 다양한 데이터 구조에 대한 매칭이 가능합니다.
  • 강력한 패턴 매칭 기능: 데이터 구조의 특정 부분만을 매칭하거나, 값을 패턴으로 사용할 수 있어 유연성이 높습니다.

 

반응형