본문 바로가기
Python/Python Basic

5. Python - print() 함수 사용법 3

by Rosmary 2019. 7. 17.
728x90
반응형

Format()을 이용한, 출력물 정렬.

 

 

1. {:number} -> 변수에 출력 공간 할당하기

 

이전 포스팅에서, 누군가의 성별, 나이, 주소를 입력받아 화면에 출력하는 내용을 진행했었다. 이제 이 예제를 조금 변형해서, 이름과 나이, 주소를 받는다고 가정해보자. 여러분들은, 누가 보더라도 한 눈에 알아보기 쉽게, 이름은 이름대로, 나이는 나이대로, 주소는 주소대로 열을 맞추고, 가운데 정렬을 적용하여 출력하고 싶어한다. 아래와 같이 말이다.

  

-------------------------------------------------------  

   김철수        21              서울특별시 강서구

   박말순        24                경기도 고양시

   이가탄        30              대전광역시 둔산구

      ....

-------------------------------------------------------

 

한 줄 씩 출력을 진행해보자. 아마 포맷팅에 대해 이해를 하신 분들이라면, 첫 줄은 아래와 같이 출력할 수 있을 것이다. 

 

이제 다음 사람에 대한 정보를 출력하기 위해, 변수의 내용만 바꿔보자. name은 박말순, age는 24 그리고 주소는 경기도 고양시로 말이다. 

 

출력된 화면을 보면, 이름과 나이는 정확히 오와 열을 맞추어 가운데 정렬 효과를 발산하는데 반해, 주소는 그렇지 못하다. 주소는 이름, 나이와 달리, 출력될 수 있는 글자 수의 범위가 너무나 광범위하고, 따라서 이름이나 나이와 같이 가운데에 정렬하는 것이 쉽지가 않다. 

 

이름이 외자이거나 나이가 10살 미만인 경우에는 주소 뿐만 아니라, 이름과 나이 역시 틀어져버리게 된다. 만약 이름이 "이준"이고 나이가 5살이며 주소가 "부산광역시 사하구"인 어린이의 정보를 출력해보자. 아마 다음과 같은 결과가 나타날 것이다.

 

파이썬 인터렉티브 모드에서 출력 결과물을 확인하더라도, 예외적인 이름과 나이가 들어가는 순간, 모든 형식이 깨져버리는 것을 알 수 있다. 그럼, 어떻게 하면 이 정보들을 보기 좋게 정렬할 수 있을까?? 

 

우선, 계획을 세워보자. 일반적인 한국인의 이름은 최소 2글자에서 최대 4글자를 가진다. 따라서 이름이 입력되는 공간은 최대 4글자가 입력될 수 있는 공간을 할당한다고 하자. 김거북이와두루미어쩌구저쩌구 하는 이름은 잠시 잊자... 나이는 보통 2자리 숫자로 구성되지만, 최근 의료 기술의 발달로 기대 수명이 늘었으니, 숫자 3글자가 입력될 수 있는 공간이 필요하다고 가정하자. 주소는 도와 시만 입력받으니 대략 15자 정도의 공간을 할당한다고 가정하자.

 

위의 계획을 반영하여, 다음과 같이 코드를 작성하면 된다.

 

=================================

print("{:4}    {:3}    {:15}".format(name, age, addr))

=================================

대괄호 안에 :숫자를 쓰기 전의 결과와 비교해보면, 마지막 이준 어린이에 대한 정보가 다른 사람의 정보와 열을 맞춰 출력된 것을 확인할 수 있다. 크게 달라진 점을 모르겠다면, 다음 출력 결과를  보자.

 

 

  < 오른쪽 이준의 주소가 열에서 약간 벗어났는데, 한글이라서 그렇다. 한글은 이상하게 조금씩 깨지는게.... >

왼쪽은 포멧팅 괄호 내에 :숫자를 기재하지 않은 결과, 오른쪽은 기재한 결과다. 대괄호 내에 ":숫자"를 입력하여, 각 변수가 출력될 수 있는 공간을 마련해줌으로써, 외자 이름이나 10살 미만의 인원 정보가 입력되더라도, 열에 맞게 출력되는 것을 확인할 수 있다.  

 

만약, 할당된 공간을 넘어가는 변수값이 들어온다면, 어떻게 될까? 예를 들어, 이름이 김거북이와 두루미라면.... 직접 실험해보면 아시겠지만, 할당된 공간을 넘어서는 값이 출력 대상으로 입력되면, 오와 열이 다시 깨지는 것을 볼 수 있다.

 

< 언급하지 않은 문법이 보이는데, 여기서는 print()에만 신경쓰면 된다.>

따라서, 포멧팅을 이용해, 특정 정보를 정렬할 때에는, 해당 정보가 가질 수 있는 최대 글자수를 고려하여, 코드를 작성하는 것이 좋다. 

 

 

 

2. 가운데 정렬, 우측 정렬, 좌측 정렬

 

위에 출력된 정보를 보면, 모든 출력값이 할당 공간 내에서 좌측 정렬을 기본으로 출력된 것을 볼 수 있다. 만약 이를 우측 출력으로 바꾸고 싶다면 어떻게 하면 될까? 아래의 결과물을 보자

 

< 한글은 열이 깨져서 부득이하게 영문으로 예시를 들었다 >

출력 코드를 자세히 보면, print() 함수 내 대괄호에 꺽쇠 기호가 있는 것이 보인다. 콜론과 할당 자릿수 사이에 꺽쇠를 넣어줌으로써, 컴퓨터가 해당 정보가 우측 정렬되어야 하는지, 좌측정렬되어야 하는지, 혹은 가운데 정렬이 되어야 하는지 판단할 수 있도록 만든다. 아무것도 명시하지 않는다면 문자열은 좌측정렬, 숫자는 우측정렬이다.

 

< 꺽쇠가 없을때는 문자열 좌측 정렬, 숫자형 우측정렬이다 >

=============

^ :    가운데 정렬

> :    우측 정렬

< :    좌측 정렬

=============

 

 

3.  Escape 문자 활용하기

 

위의 예제에서, 이름, 나이 그리고 주소가 기록되는 공간 사이에, 필자는 스페이스 4개를 입력했다. 지금이야 출력값이 3개뿐이니, 큰 어려움이 없지만, 만약 입력해야하는 정보가 많아진다면, 그만큼 스페이스를 4번씩이나 쳐서 이들 정보를 분리하는 작업은 노가다가 될 것이 뻔하다. 

 

이런 불편함을 없애고자 존재하는 것이 이스케이프 문자(Escape Character)다. 이스케이프 문자는 역슬레시(\ , 입력 시에 W와 비슷한 문자로 보일 것이다. 혼동하지 않도록 주의하자)뒤에 특정 문자를 입력하면, 컴퓨터가 그 문자를 달리 해석하여 출력해준다. 아래의 예시를 보자.

 

첫 번째 코드 print("{}\n{}\n{}".format(name, age, addr)) 를 보자. 필자가 \n으로 입력한 곳은, 컴퓨터가 전부 엔터로 인식하고, 이름, 나이, 주소 사이를 한 행씩 개행한 것을 확인할 수 있다. 두 번째 코드는 역슬래시 뒤에 n 대신 t를 써서 코드를 입력했는데, 컴퓨터는 이를 탭(tab)키 입력으로 받아들여, 각 정보 사이에 일정 칸 수만큼의 공백을 발생시킨다.

 

만약, 문자열에 쌍따옴표를 출력하고 싶다면 어떻게 하면 될까? 그냥 쌍따옴표를 쓰면, 에러가 발생하는데, 컴퓨터가 쌍따옴표를 문자열의 끝으로 인식하고, 그 뒤에 입력된 Hello""를 문법에서 벗어난 오류로 인식하기 때문이다.

 

이스케이프 문자에 사용되는 역슬래시(\)는 해석되지 말아야 하는 문자를 명시하는 역할도 한다. 따라서 쌍따옴표 앞에 역슬래시를 입력함으로써, 원하는 문자열을 제대로 출력할 수 있다. 쌍따옴표 외에도, 포멧팅에 사용하는 {}를 문자로 사용하기 위해서도 이스케이프 문자를 사용할 수 있다.( \{ 나 \}  와 같은 방식으로)

 

 

이스케이프 문자의 종류는 아래처럼 무궁무진하게 많으나, 실제 프로그래밍에서는 위에서 언급한 내용을 제외하면 거의 사용되지 않는다.

 

 


지금까지 3개의 포스팅을 통해, 파이썬의 print()함수 사용법에 대하여 알아보았다. 파이썬 인터렉티브 모드에서 연습하다보면, 오타로 인해 나타나는 오류로 인해 짜증스러울 때도 있겠지만, 가장 기초가 되는 부분이므로 실력향상을 원한다면 열심히 연습하도록 하자.

 

다음 포스팅에서는, 지금까지 보았던 자료형인 문자/숫자 외의 다른 자료형에 대해 이야기하려 한다.

 

FIN.

반응형

댓글