Python 출력 정렬 방법

PythonBeginner
지금 연습하기

소개

Python 프로그램을 작성할 때, 깔끔하고 정돈된 방식으로 출력을 표시하는 것은 코드 가독성과 사용자 경험 모두에 필수적입니다. 보고서를 작성하거나, 표 형식 데이터를 표시하거나, 단순히 콘솔에 정보를 출력하는 경우에도 적절한 텍스트 정렬은 출력을 더욱 전문적으로 만들고 읽기 쉽게 합니다.

이 Lab 에서는 Python 에서 텍스트 출력을 정렬하고 서식을 지정하는 다양한 기술을 배우게 됩니다. 다양한 정렬 방법을 살펴보고, 서식 지정 기술을 연습하며, 실제 응용 프로그램에 적용할 수 있는 잘 구조화된 표 형식 디스플레이를 만들 것입니다.

Python 에서의 기본 문자열 정렬

이 첫 번째 단계에서는 Python 에서 텍스트 정렬의 기본 개념을 배우고 기본적인 정렬 기술을 구현합니다.

텍스트 정렬이란 무엇인가요?

텍스트 정렬은 주어진 공간 내에서 텍스트가 어떻게 배치되는지를 나타냅니다. Python 은 콘솔에 출력할 때 텍스트의 위치를 제어하는 여러 가지 방법을 제공합니다. 세 가지 주요 정렬 유형은 다음과 같습니다.

  • 왼쪽 정렬 (Left alignment): 텍스트가 할당된 공간의 왼쪽 가장자리에서 시작합니다.
  • 오른쪽 정렬 (Right alignment): 텍스트가 할당된 공간의 오른쪽 가장자리에서 끝납니다.
  • 가운데 정렬 (Center alignment): 텍스트가 할당된 공간 내에서 가운데에 위치합니다.

첫 번째 정렬 프로그램

기본 정렬 기술을 시연하기 위해 간단한 Python 스크립트를 만들어 보겠습니다.

  1. LabEx 환경에서 WebIDE 를 엽니다.

  2. WebIDE 에서 "New File" 아이콘을 클릭하여 /home/labex/project 디렉토리에 basic_alignment.py라는 새 파일을 만듭니다.

  3. 파일에 다음 코드를 추가합니다.

## basic_alignment.py
print("Basic String Alignment Examples")
print("-" * 30)

## Left alignment example
print("Left alignment:")
print("Python".ljust(20) + "|")
print("Programming".ljust(20) + "|")
print("Alignment".ljust(20) + "|")
print()

## Right alignment example
print("Right alignment:")
print("Python".rjust(20) + "|")
print("Programming".rjust(20) + "|")
print("Alignment".rjust(20) + "|")
print()

## Center alignment example
print("Center alignment:")
print("Python".center(20) + "|")
print("Programming".center(20) + "|")
print("Alignment".center(20) + "|")
  1. Ctrl+S를 누르거나 메뉴에서 "File" > "Save"를 선택하여 파일을 저장합니다.

  2. "Terminal" 메뉴를 클릭하고 "New Terminal"을 선택하여 WebIDE 에서 터미널을 엽니다 (아직 열려 있지 않은 경우).

  3. Python 인터프리터를 사용하여 스크립트를 실행합니다.

cd ~/project
python3 basic_alignment.py
  1. 다음 출력이 표시되어야 합니다.
Basic String Alignment Examples
------------------------------
Left alignment:
Python              |
Programming         |
Alignment           |

Right alignment:
              Python|
         Programming|
           Alignment|

Center alignment:
       Python       |
     Programming    |
      Alignment     |

코드 이해

방금 만든 스크립트는 Python 에서 세 가지 기본 문자열 정렬 방법을 보여줍니다.

  • ljust(width): 지정된 너비의 필드 내에서 문자열을 왼쪽 정렬합니다.
  • rjust(width): 지정된 너비의 필드 내에서 문자열을 오른쪽 정렬합니다.
  • center(width): 지정된 너비의 필드 내에서 문자열을 가운데 정렬합니다.

각 예제에서 할당된 공간의 경계를 명확하게 표시하기 위해 각 줄의 끝에 수직 막대 (|) 를 추가했습니다. 각 경우에 텍스트가 어떻게 다르게 정렬되면서도 총 너비는 20 자로 유지되는지 확인하십시오.

다른 문자를 사용한 문자열 정렬

문자열 정렬 방법은 패딩에 사용될 채우기 문자를 지정하기 위해 두 번째 매개변수를 사용할 수도 있습니다. 이 동작을 확인하기 위해 스크립트를 수정해 보겠습니다.

  1. /home/labex/project 디렉토리에 alignment_with_chars.py라는 새 파일을 만듭니다.

  2. 파일에 다음 코드를 추가합니다.

## alignment_with_chars.py
print("String Alignment With Custom Characters")
print("-" * 40)

## Using different padding characters
print("Left alignment with dots:")
print("Python".ljust(20, '.') + "|")
print("Programming".ljust(20, '.') + "|")
print()

print("Right alignment with asterisks:")
print("Python".rjust(20, '*') + "|")
print("Programming".rjust(20, '*') + "|")
print()

print("Center alignment with hyphens:")
print("Python".center(20, '-') + "|")
print("Programming".center(20, '-') + "|")
  1. 파일을 저장하고 실행합니다.
python3 ~/project/alignment_with_chars.py
  1. 다음과 같은 출력이 표시되어야 합니다.
String Alignment With Custom Characters
----------------------------------------
Left alignment with dots:
Python..............|
Programming.........|

Right alignment with asterisks:
**************Python|
*********Programming|

Center alignment with hyphens:
-------Python------|
----Programming----|

이 예제는 다른 패딩 문자를 사용하여 정렬된 텍스트의 모양을 사용자 정의하는 방법을 보여줍니다.

정렬을 위한 고급 포맷팅 방법

이전 단계에서는 ljust(), rjust(), center() 메서드를 사용하여 기본적인 문자열 정렬에 대해 배웠습니다. 이제 Python 에서 제공하는 더 강력하고 유연한 포맷팅 메서드를 살펴보겠습니다.

Python 의 문자열 포맷팅 메서드

Python 은 문자열을 포맷팅하는 여러 가지 방법을 제공합니다.

  1. 구식 포맷팅 ( % 연산자 사용)
  2. str.format() 메서드
  3. F-문자열 (포맷팅된 문자열 리터럴, Python 3.6 이상에서 사용 가능)

각 메서드는 텍스트를 정렬하고 다양한 데이터 유형을 포맷팅하는 방법을 제공합니다. 하나씩 살펴보겠습니다.

1. 구식 포맷팅 (% 연산자)

이는 Python 에서 가장 오래된 문자열 포맷팅 방법으로, C 의 printf() 함수와 유사합니다.

  1. /home/labex/project 디렉토리에 old_style_formatting.py라는 새 파일을 만듭니다.
## old_style_formatting.py
print("구식 문자열 포맷팅")
print("-" * 30)

## % 포맷팅으로 왼쪽 정렬
print("왼쪽 정렬:")
print("%-15s | %-10s" % ("Python", "Language"))
print("%-15s | %-10s" % ("JavaScript", "Web"))
print()

## % 포맷팅으로 오른쪽 정렬
print("오른쪽 정렬:")
print("%15s | %10s" % ("Python", "Language"))
print("%15s | %10s" % ("JavaScript", "Web"))
print()

## 숫자 포맷팅
price = 125.5
tax_rate = 0.21
print("가격: $%8.2f" % price)
print("세율: %6.1f%%" % (tax_rate * 100))
print("세금액: $%6.2f" % (price * tax_rate))
print("총액: $%8.2f" % (price * (1 + tax_rate)))
  1. 파일을 저장하고 실행합니다.
python3 ~/project/old_style_formatting.py
  1. 다음과 유사한 출력이 표시됩니다.
구식 문자열 포맷팅
------------------------------
왼쪽 정렬:
Python          | Language
JavaScript      | Web

오른쪽 정렬:
         Python |  Language
     JavaScript |       Web

숫자 포맷팅:
가격: $   125.50
세율:   21.0%
세금액: $ 26.36
총액: $   151.86

2. str.format() 메서드

str.format() 메서드는 문자열을 포맷팅하는 더 다재다능한 방법을 제공하며, % 연산자의 일부 제한 사항을 해결하기 위해 도입되었습니다.

  1. /home/labex/project 디렉토리에 format_method.py라는 새 파일을 만듭니다.
## format_method.py
print("str.format() 를 사용한 문자열 포맷팅")
print("-" * 35)

## 기본 정렬
print("기본 정렬:")
print("{:<15} | {:<10}".format("Python", "Language"))
print("{:>15} | {:>10}".format("Python", "Language"))
print("{:^15} | {:^10}".format("Python", "Language"))
print()

## 사용자 지정 채움 문자
print("사용자 지정 채움 문자:")
print("{:*<15} | {:.>10}".format("Python", "Language"))
print("{:#^15} | {:=^10}".format("Python", "Language"))
print()

## 필드 이름 사용
print("필드 이름 사용:")
print("{name:<15} | {type:<10}".format(name="JavaScript", type="Web"))
print("{name:>15} | {type:>10}".format(name="Python", type="Language"))
print()

## 숫자 포맷팅
price = 125.5
tax_rate = 0.21
print("숫자 포맷팅:")
print("가격: ${:8.2f}".format(price))
print("세율: {:6.1f}%".format(tax_rate * 100))
print("세금액: ${:6.2f}".format(price * tax_rate))
print("총액: ${:8.2f}".format(price * (1 + tax_rate)))
  1. 파일을 저장하고 실행합니다.
python3 ~/project/format_method.py
  1. 다음과 유사한 출력이 표시됩니다.
str.format()를 사용한 문자열 포맷팅
-----------------------------------
기본 정렬:
Python          | Language
         Python |   Language
    Python      |  Language

사용자 지정 채움 문자:
Python********* | Language...
#####Python##### | ==Language==

필드 이름 사용:
JavaScript      | Web
         Python |  Language

숫자 포맷팅:
가격: $  125.50
세율:   21.0%
세금액: $ 26.36
총액: $  151.86

3. F-문자열 (Python 3.6+)

F-문자열은 문자열 리터럴 내에 표현식을 포함하는 간결하고 편리한 방법을 제공합니다. 문자 'f'로 시작하고 중괄호 {}를 사용하여 표현식을 포함합니다.

  1. /home/labex/project 디렉토리에 f_strings.py라는 새 파일을 만듭니다.
## f_strings.py
print("F-문자열을 사용한 문자열 포맷팅")
print("-" * 35)

language = "Python"
category = "Language"
version = 3.10
year = 2022

## 기본 정렬
print("기본 정렬:")
print(f"{language:<15} | {category:<10}")
print(f"{language:>15} | {category:>10}")
print(f"{language:^15} | {category:^10}")
print()

## 동적 너비 지정
width1 = 15
width2 = 10
print("동적 너비:")
print(f"{language:<{width1}} | {category:<{width2}}")
print(f"{language:>{width1}} | {category:>{width2}}")
print()

## F-문자열 내 표현식
print("F-문자열 내 표현식:")
print(f"{language + str(version):<15} | {year - 1991:>10} years old")
print()

## 숫자 포맷팅
price = 125.5
tax_rate = 0.21
print("숫자 포맷팅:")
print(f"가격: ${price:8.2f}")
print(f"세율: {tax_rate * 100:6.1f}%")
print(f"세금액: ${price * tax_rate:6.2f}")
print(f"총액: ${price * (1 + tax_rate):8.2f}")
  1. 파일을 저장하고 실행합니다.
python3 ~/project/f_strings.py
  1. 다음과 유사한 출력이 표시됩니다.
F-문자열을 사용한 문자열 포맷팅
-----------------------------------
기본 정렬:
Python          | Language
         Python |  Language
    Python      | Language

동적 너비:
Python          | Language
         Python |  Language

F-문자열 내 표현식:
Python 3.1      |         31 years old

숫자 포맷팅:
가격: $  125.50
세율:   21.0%
세금액: $ 26.36
총액: $  151.86

포맷팅 방법 비교

각 포맷팅 방법에는 장단점이 있습니다. 각 방법을 사용할 때는 다음을 고려하십시오.

  • % 연산자: 이전 Python 버전과의 호환성이 필요하거나 레거시 코드에서 사용합니다.
  • str.format(): % 포맷팅보다 강력하며, 복잡한 포맷팅 요구 사항에 특히 유용합니다.
  • F-문자열: 가독성이 뛰어나고 성능이 좋으므로 모든 새로운 Python 코드 (Python 3.6 이상) 에서 권장합니다.

Python 의 최신 추세는 가독성과 성능 측면에서 F-문자열을 가능한 한 많이 사용하는 것입니다.

파이썬으로 서식이 지정된 표 만들기

이제 다양한 정렬 기법을 배웠으니, 이를 활용하여 잘 정렬된 표를 만드는 방법을 알아보겠습니다. 표는 구조화된 데이터를 읽기 쉬운 형식으로 표시하는 일반적인 방법이며, 적절한 정렬은 표 형식의 정보를 효과적으로 제시하는 데 매우 중요합니다.

고정 너비 열을 가진 간단한 표

고정 너비 열을 사용하여 간단한 표를 만드는 방법을 살펴보겠습니다.

  1. /home/labex/project 디렉토리에 simple_table.py라는 새 파일을 만듭니다.
## simple_table.py
print("고정 너비 표")
print("-" * 50)

## 데이터 정의
header = ["이름", "나이", "도시", "직업"]
data = [
    ["John Smith", 34, "New York", "의사"],
    ["Sarah Johnson", 28, "San Francisco", "엔지니어"],
    ["Michael Brown", 42, "Chicago", "교사"],
    ["Emily Davis", 31, "Boston", "과학자"]
]

## 헤더 출력
print(f"{header[0]:<20} {header[1]:<8} {header[2]:<15} {header[3]:<15}")
print("-" * 60)

## 행 출력
for row in data:
    print(f"{row[0]:<20} {row[1]:<8} {row[2]:<15} {row[3]:<15}")
  1. 파일을 저장하고 실행합니다.
python3 ~/project/simple_table.py
  1. 다음과 같이 깔끔하게 정렬된 표가 출력됩니다.
고정 너비 표
--------------------------------------------------
이름                 나이      도시            직업
------------------------------------------------------------
John Smith           34       New York        의사
Sarah Johnson        28       San Francisco   엔지니어
Michael Brown        42       Chicago         교사
Emily Davis          31       Boston          과학자

여러 정렬 유형을 가진 동적 표

다양한 유형의 데이터는 종종 서로 다른 정렬 스타일로 더 잘 표시됩니다. 예를 들어, 텍스트는 종종 왼쪽 정렬되고, 숫자는 종종 오른쪽 정렬됩니다. 혼합된 정렬을 사용하여 더 정교한 표를 만들어 보겠습니다.

  1. /home/labex/project 디렉토리에 dynamic_table.py라는 새 파일을 만듭니다.
## dynamic_table.py
print("혼합 정렬을 사용한 동적 표")
print("-" * 50)

## 데이터 정의
header = ["제품", "가격", "수량", "총액"]
products = [
    ["노트북", 1299.99, 3, 3899.97],
    ["마우스", 24.50, 10, 245.00],
    ["모니터", 349.95, 2, 699.90],
    ["키보드", 49.99, 5, 249.95],
    ["헤드폰", 89.95, 4, 359.80]
]

## 내용에 기반한 열 너비 계산
col_widths = [
    max(len(str(header[0])), max(len(str(row[0])) for row in products)) + 2,
    max(len(str(header[1])), max(len(f"${row[1]:.2f}") for row in products)) + 2,
    max(len(str(header[2])), max(len(str(row[2])) for row in products)) + 2,
    max(len(str(header[3])), max(len(f"${row[3]:.2f}") for row in products)) + 2
]

## 헤더 출력
print(f"{header[0]:<{col_widths[0]}}"
      f"{header[1]:>{col_widths[1]}}"
      f"{header[2]:>{col_widths[2]}}"
      f"{header[3]:>{col_widths[3]}}")
print("-" * sum(col_widths))

## 적절한 정렬로 행 출력
for product in products:
    print(f"{product[0]:<{col_widths[0]}}",
          f"${product[1]:.2f}".rjust(col_widths[1]),
          f"{product[2]}".rjust(col_widths[2]),
          f"${product[3]:.2f}".rjust(col_widths[3]))

## 요약 출력
total_quantity = sum(product[2] for product in products)
total_cost = sum(product[3] for product in products)
print("-" * sum(col_widths))
print(f"{'총계':<{col_widths[0]}}",
      f"".rjust(col_widths[1]),
      f"{total_quantity}".rjust(col_widths[2]),
      f"${total_cost:.2f}".rjust(col_widths[3]))

... (나머지 코드 생략)

요약

이 Lab 에서는 Python 에서 텍스트 출력을 정렬하고 서식을 지정하는 다양한 기술을 배웠습니다.

  • 기본 문자열 정렬 방법: ljust(), rjust(), 및 center()
  • 다양한 문자열 서식 지정 접근 방식: % 연산자, str.format(), 및 f-string
  • 고정 너비 열을 사용하여 잘 구조화된 테이블을 만드는 방법
  • 데이터 유형에 따라 다른 정렬 스타일을 적용하는 방법
  • 적절한 서식을 사용하여 재무 보고서와 같은 실제 응용 프로그램을 만드는 방법

이러한 텍스트 정렬 기술은 간단한 명령줄 유틸리티에서 복잡한 데이터 처리 시스템에 이르기까지 많은 응용 프로그램에서 읽기 쉽고 전문적인 출력을 만드는 데 필수적입니다. Python 에서 텍스트 정렬을 마스터하면 프로그램의 사용자 경험과 가독성을 크게 향상시킬 수 있습니다.

Python 여정을 계속 진행하면서 깨끗하고 잘 서식 지정된 출력은 프로그램의 계산 논리만큼이나 중요한 경우가 많다는 것을 기억하십시오. 이 Lab 에서 배운 기술은 데이터를 기능적이고 시각적으로 매력적인 방식으로 제시하는 데 도움이 될 것입니다.