파이썬 2중 반복문: 하이픈 _ 모양과 별 * 모양을 교차 출력

파이썬 2중 반복문을 이용한 하이픈과 별 출력 방법

프로그래밍을 처음 시작하는 초급자라면, 파이썬의 반복문을 활용하여 다양한 패턴을 출력하는 연습은 큰 도움이 됩니다. 그 중에서도 2중 반복문을 사용하여 하이픈(_)과 별(*) 모양을 교차로 출력하는 것은 초급자에게 좋은 연습 주제입니다. 이 글에서는 초급부터 상급 단계까지 2중 반복문을 활용하여 하이픈과 별을 교차로 출력하는 다양한 방법을 배워보겠습니다.

2중 반복문의 기본 개념

2중 반복문은 반복문 안에 또 다른 반복문을 포함하는 구조로, 주로 배열이나 리스트의 요소를 순차적으로 처리할 때 유용합니다. 파이썬에서는 forwhile 문을 사용하여 2중 반복문을 구현할 수 있습니다. 가장 기초적인 형태는 다음과 같습니다.

for i in range(5):
    for j in range(i):
        print("*", end="")
    print()

실행 결과


*
**
***
****

위 예제에서는 두 개의 for 문을 중첩하여 별 모양을 계단식으로 출력합니다. 첫 번째 반복문은 행(row)을 결정하고, 두 번째 반복문은 각 행에서 출력할 요소를 결정합니다.

기초 코드 예제 1 - 간단한 별 출력

먼저, 가장 단순한 형태의 2중 반복문을 통해 별 모양을 출력합니다. 이 예제는 반복문을 이해하는 데 있어서 기초적인 연습이 될 것입니다.

for i in range(5):
    for j in range(5 - i):
        print("*", end="")
    print()

실행 결과

*****
****
***
**
*

이 코드는 매 행마다 별(*)의 개수를 줄여가며 출력합니다. range(5 - i)는 첫 번째 행에서 다섯 개의 별을 출력하고, 이후 행마다 별의 개수를 하나씩 줄입니다.

기초 코드 예제 2 - 하이픈과 별 교차 출력

이번에는 조건문을 추가하여 하이픈과 별을 교차로 출력하는 예제를 살펴보겠습니다.

for i in range(5):
    for j in range(5):
        if j < i:
            print("_", end="")
        else:
            print("*", end="")
    print()

실행 결과

*****
_****
__***
___**
____*

이 코드는 if 문을 사용하여 인덱스 ji보다 작은 경우에는 하이픈을, 그렇지 않은 경우에는 별을 출력합니다. 이는 하이픈과 별을 교차로 출력하는 기본적인 방법을 제공합니다.

중급 코드 예제 1 - 사용자의 입력에 따른 출력

이제 실제로 사용할 수 있는 프로그램을 만들어 보겠습니다. 사용자로부터 입력을 받아, 해당 길이만큼 하이픈과 별을 교차로 출력하는 프로그램입니다.

n = 8  # 사용자가 원하는 길이
for i in range(n):
    for j in range(n):
        if j < i:
            print("_", end="")
        else:
            print("*", end="")
    print()

실행 결과

********
_*******
__******
___*****
____****
_____***
______**
_______*

여기서는 사용자가 n 값을 설정하여 출력되는 길이를 지정할 수 있습니다. 이는 조건문과 반복문의 응용력 향상에 도움이 됩니다.

중급 코드 예제 2 - 대칭 패턴 출력

또 다른 실용 예제로, 대칭적인 패턴을 출력하는 프로그램을 만들어 봅니다. 이는 앞서 작성한 코드를 조금 변형하여 대칭성을 추가한 것입니다.

n = 5
for i in range(n):
    for j in range(2 * n - 1):
        if n - i - 1 <= j <= n + i - 1:
            print("*", end="")
        else:
            print("_", end="")
    print()

실행 결과

____*____
___***___
__*****__
_*******_
*********

위 코드는 대칭 패턴을 출력하며, if 조건문을 통해 가운데를 기준으로 대칭인 별 모양을 만들어냅니다.

자주 하는 실수

다음은 2중 반복문을 사용할 때 흔히 발생하는 실수와 그 해결법입니다.

# 잘못된 코드
for i in range(5):
    for j in range(5):
        if j < i:
            print("_*", end="")
    print()

실행 결과


_*
_*_*
_*_*_*
_*_*_*_*

위 코드는 하이픈과 별을 붙여 출력하지만, 논리적으로 원하는 결과를 얻지 못합니다. 다음은 이를 수정한 올바른 코드입니다.

# 올바른 코드
for i in range(5):
    for j in range(5):
        if j < i:
            print("_", end="")
        else:
            print("*", end="")
    print()

실행 결과

*****
_****
__***
___**
____*

이 오류는 조건의 논리를 잘못 이해하여 발생하며, 해결 방법은 조건문 부분을 재확인하는 것입니다.

상급 코드 예제 1 - 함수 도입

이제 함수의 장점을 살펴보겠습니다. 함수는 코드의 재사용성과 가독성을 높여 줍니다.

def print_pattern(n):
    for i in range(n):
        for j in range(n):
            if j < i:
                print("_", end="")
            else:
                print("*", end="")
        print()

print_pattern(5)

실행 결과

*****
_****
__***
___**
____*

위 함수는 하이픈과 별을 교차 출력하는 기능을 캡슐화하여 사용자가 손쉽게 패턴을 출력할 수 있도록 합니다.

상급 코드 예제 2 - 객체 지향 패턴 출력

함수를 넘어, 클래스를 통해 패턴 출력을 관리해 보겠습니다. 클래스는 상태와 기능을 함께 묶어 관리할 수 있어 유용합니다.

class PatternPrinter:
    def __init__(self, n):
        self.n = n

    def print_pattern(self):
        for i in range(self.n):
            for j in range(self.n):
                if j < i:
                    print("_", end="")
                else:
                    print("*", end="")
            print()

printer = PatternPrinter(5)
printer.print_pattern()

실행 결과

*****
_****
__***
___**
____*

클래스를 사용하면, 패턴 출력에 필요한 데이터를 객체 내에 저장할 수 있으며, 여러 인스턴스를 통해 다양한 패턴을 손쉽게 출력할 수 있습니다.

상급 코드 예제 3 - 종합 실전

마지막으로, 종합 실전 예제로 다양한 패턴을 출력하는 클래스를 만들어 보겠습니다.

class AdvancedPatternPrinter:
    def __init__(self, n):
        self.n = n

    def print_hyphen_star(self):
        for i in range(self.n):
            for j in range(self.n):
                if j < i:
                    print("_", end="")
                else:
                    print("*", end="")
            print()

    def print_symmetric_star(self):
        for i in range(self.n):
            for j in range(2 * self.n - 1):
                if self.n - i - 1 <= j <= self.n + i - 1:
                    print("*", end="")
                else:
                    print("_", end="")
            print()

advanced_printer = AdvancedPatternPrinter(5)
advanced_printer.print_hyphen_star()
advanced_printer.print_symmetric_star()

실행 결과

*****
_****
__***
___**
____*
____*____
___***___
__*****__
_*******_
*********

이 클래스는 다양한 패턴 출력 기능을 제공하며, 각 메서드는 특정 패턴을 출력하는 역할을 합니다. 이렇게 구조화하면 코드의 유지보수성과 확장성이 크게 향상됩니다.

요약

이번 글에서는 파이썬의 2중 반복문을 활용하여 하이픈과 별을 교차로 출력하는 방법을 배웠습니다. 초급 단계에서는 2중 반복문의 기초를, 중급 단계에서는 실용적인 프로그램을, 상급 단계에서는 함수와 클래스의 장점을 활용하여 구조화된 코드를 작성하는 방법을 익혔습니다. 이를 통해 반복문 활용 능력을 한층 더 높일 수 있기를 바랍니다.

#파이썬초급 #Python기초 #코딩독학 #2중반복문 #반복문활용 #프로그래밍예제 #하이픈출력 #별출력 #파이썬강좌 #함수와클래스