파이썬 콘솔창 데이터 입력(input) 출력(print) 포매팅

파이썬 프로그래밍을 공부하다 보면, 이제 입력된 데이터 값을 가지고 연산을 해서 결과를 보여주어야 하는 경우들이 있다. 그럴 때 콘솔창에서 데이터를 입력받고 출력하는 간단한 방법에 대해 알아본다.

콘솔창이란?

사실 지금까지 파이썬을 실행하기 위해 사용해왔던 기본적인 Cmder 같은 화면을 콘솔창이라고 한다.

cmder

이렇게 도스같은 화면을 CLI (Command Line Interface) 라고 하는데 이는 아이콘과 그림으로 이루어진 Graphic User Interface (GUI)와 달리 Text로 컴퓨터에 명령을 입력하는 체계를 말한다.

요즘에 누가 이런걸 쓰냐? 하다가 최근에 머신러딩 딥러닝 인공지능 알고리즘 개발이 대세가 되면서 파이썬 프로그래밍도 유행하고 이런 CLI 환경에서의 작업환경이 다시 중요시되었다.

대표적으로는 윈도우의 CMD, 그리고 맥/리눅스에서 터미널 화면이 CLI 이다.

초창기 컴퓨터 단말기

왜 콘솔이라고 부르냐면 초창기 컴퓨터는 고가의 장비여서 서버실에 본체가 있고, 사용자는 이렇게 자기 자리에서 모니터와 키보드로만 이루어진 단말기를 가지고 명령어를 입출력하였다. 이 단말기를 Console 이라고 불렀는데 여기서 유래가 되어 텍스트 타이핑하는 화면을 계속 콘솔이라고 칭하고 있다.

터미널 콘솔 쉘의 차이점이 궁금하다면 (굳이) 이 링크 내용도 참고해 보자.

바쁜 현대인을 위해 세줄 요약하면

  • 터미널 : 끝, 말단의 의미로 메인컴퓨터가 실제 작업을 하는동안 명령어를 전송하고 답장을 받는 단말기 (타자기 형태였다)
  • 콘솔 : 20세기 중반으로 오며 화면과 키보드가 결합된 가구 (furniture) 형태로 발전하였는데 기능적으로는 사실상 터미널이고 소프트웨어 관점에서는 완전히 동의어이다.
  • 쉘 : 터미널과 콘솔이 기능적인 의미라면 쉘은 터미널에 전달하고 받기위한 화면상의 프로그램을 가리킨다.

결론은 그냥 대충 다같은 의미로 쓰면 된다는거.

Input 으로 데이터 입력받기

실제로 콘솔창에서 input 데이터를 받아서 출력해주는 명령어를 실습해본다.

input 명령어 예제

input() 명령어를 입력하면 화면에 커서가 대기하게 되고 값을 치면 프로그램에 전달된다. 여기서는 입력된 값을 name이라는 변수에 할당하도록 한 뒤, print문을 통해 변수에 입력된 값을 출력하도록 하였다.

name=input("이름을 입력해주세요")
print("Hi", name)
print("★", name, "★", sep="")
print("★", name, "★", end="◁◁◁◁◁◁")

이렇게 print문 내부에 콤마(,)로 연결해주면 여러 가지를 이어서 출력해줄 수 있다.

input 명령어 예제

두번째 구문처럼 print문 안에 sep=”” 를 넣어주면 콤마로 연결된 것들이 한칸 띄어지지 않고 붙어서 출력되도록 할 수 있다. sep는 seperate의 약자로 각 아이템간에 어떻게 분리를 할 것인지를 지정해주는 것이다. 기본값은 띄어쓰기 한 칸으로 되어있다.

input 명령어 예제

end는 print문으로 출력하는 문구의 마지막에 붙여주는데, 이것의 기본값은 \n (역슬래쉬 n)으로 되어있다. 따라서 다른 값을 입력해주면 위와 같이 줄바뀜이 되지 않고 end에 입력한 값이 붙어나오면서 한 줄 아래가 아닌 바로 옆에 커서가 뜬다.

temperature = float(input(“온도를 입력해주세요”))

input() 괄호안에 텍스트를 써주면 값을 입력받을 때 사용자에게 문구를 보여준다. 또 위 코드처럼 입력된 값을 바로 float으로 변환한 뒤 변수에 저장할 수도 있다.

input 명령어 예제

입력받은 숫자를 실수형으로 변환한 뒤 출력해준 결과이다.

input 명령어 예제

float 타입으로 변환한 입력값을 print문으로 출력해주고, 입력값이 할당된 변수의 type을 같이 확인하는 예시이다.

이렇게 콘솔창에서 input문을 이용해서 데이터를 입력받고 그것을 print문으로 출력하는 간단한 작업을 할 수 있다.

print문 출력포맷 설정하기

input과 print, 데이터의 입력과 출력은 동전의 양면과도 같은 뗄레야 뗄 수 없는 한 쌍이라 앞에서 input을 설명하면서 print도 어느정도 같이 설명을 하였다. 이번에는 print 출력시에 데이터 형식을 지정하는 포매팅 방법에 대해 좀 더 자세히 살펴본다.

회사에서 엑셀 정리업무를 한다던지 할 때 소수점 자리수를 맞추는 등 데이터의 양식을 정리해본 경험이 있을 것이다. 파이썬에서도 몇 가지 방법을 통해 비슷한 작업을 할 수 있다.

## 1 숫자 직접 출력하기
print(1,2,3)

## 1 결과
1 2 3

## 2 문자 직접 출력하기
print("a" , "b" , "c")

## 2 결과
a b c

## 3 더하기로 연결시 변수 타입 맞춰주기
b=5
print("a" + str(b) + "c")

## 3 결과
a5c

가장 기본적인 포매팅 방식에는 위와 같은 것들이 있다. 먼저 print 문 내에 숫자나 문자를 직접 입력해서 출력하도록 하는 방법이 있다. 문자는 작은 따옴표나 큰 따옴표 속에 넣어서 문자 형태라고 인식시킨다.

print 내에 여러 요소를 더하기 기호를 이용해서 붙이는 방법도 있는데 이 때는 띄어쓰기가 없이 모두 붙어서 출력된다. 단 자료형이 서로 다르다면 에러가 발생하므로 숫자형/문자형 끼리 통일하도록 해주어야 한다. 정수형 실수형 통일은 상관없다. 정수형 중간에 실수형 데이터가 끼어있을 경우 결과값은 실수형으로 출력된다.

다음으로 파이썬의 포매팅 명령어를 이용한 방법이다. % 포맷팅 구분자 / .format() 함수사용 두 가지 방법이 있다.

## 4 퍼센트 포매팅
print("%d" % (1))

## 4 결과
1

## 5 format함수 이용
print("{}" .format("a"))

## 5 결과
a

파이썬에서 퍼센트 한개를 쓰면 포매팅 구분자이다. 기본 원리는 앞쪽에 공간을 지정하고 뒤쪽에 따라오는 변수들이 거기에 대입되면서 포맷을 지정해주는 방식이다.

“%datatype” % (variable)

%s : string 문자열

%c : character 문자 1개

%d : integer 정수형

%f : floating-point 부동소수

%o : 8진수

%x : 16진수

%% : 실제 퍼센트

* 진짜 퍼센트를 표시하고 싶다면 %% 이렇게 두개를 사용해야 한다. 

print 출력포맷 예제
print 출력포맷 예제

이렇게 %d를 입력해서 뒤에오는 35가 들어가도록 해주었는데, 퍼센트를 표시하고 싶으면 %% 두개를 붙여주어야 한다는 듯이다.

입력 양식에서 느껴지겠지만 따옴표 안에 내용이 들어가므로 최종적으로는 문자열 자료형으로 치환된다. 즉, 입력 데이터를 문자형으로 출력해주기 위한 포매팅이라고 할 수 있다.

print 출력포맷 예제

위 예제를 보자. 변수 a에 정수형 데이터를 입력해주고, %d로 a를 가져와서 텍스트 속에 함께 출력되도록 해주었다. 이렇게 하면 나중에 변수 a의 값이 달라지더라도 문제없이 바뀐 내용을 출력해줄 수 있다.

여기서 a의 타입은 class ‘int’ 로 정수형이 나오고, ‘%d’ % 구분자에 a를 대입해준 후에는 타입이 class ‘str’ 로 바뀐 것을 알 수 있다. str로 변경되었기에 텍스트 속에 섞여서 문제없이 출력된 것이다.

print 출력포맷 예제

이 경우를 보자. 변수 a는 처음에 정수형이었지만, %구분자를 실수형으로 써서 가져왔다. 마찬가지로 원래 변수 a의 타입은 정수형, 그리고 % 구분자에 대입한 후의 타입은 문자형이다. 그런데 출력문의 맨 윗줄을 보면 10.000000 으로 a가 실수형으로 출력되었다.

정수형 a ▶ %f 로 실수형태로 변환 ▶ 타입은 문자형으로 출력

이런 식으로 된 것이다. 보기에만 실수형이고 실제 타입은 정수형을 문자형으로 바꿔서 출력해주었다고 이해하면 된다. % 구분자로 우리눈에 보이는 출력화면의 포맷을 지정해주지만 실제로 데이터의 자료형은 문자열로 바뀐 것이다.

이런 걸 대체 왜 하는 거냐고 묻는다면… 예를 들어서 시간을 표시해주는 프로그래밍을 했다고 할 때

현재 시각은 오후 6시 30분 입니다.

현재 시각은 오전 7시 20분 입니다.

이렇게 문자열 속에서 특정 부분이 변해야 하는 경우가 있다. 게다가 그 부분은 숫자형이다. 이럴 때 숫자형 변수를 문자열 속에서 자동으로 문자열 자료형으로 바꿔주는 식으로 사용한다.

format 함수를 이용해서도 동일하게 나타낼 수 있는데 아래와 같은 형태로 입력한다.

print 출력포맷 종류

” {#1datatype} {#2datatype}” .format(#1argument, #2argument)

뭔가 문장이 이상해보이고 프로그래밍이 처음인 초심자에게는 눈에 익지 않은 형태라 어렵게 느껴진다. 그냥 예제를 보고 직접 이것저것 입력해서 결과를 확인하는 식으로 반복 학습하는 수밖에 없다.

print 출력포맷 예제

자 이런 식으로 변수 두개를 문자형 정수형으로 지정해준 뒤, 출력문 중간에 {} 괄호를 넣어놓고 뒤쪽에 .format() 을 이용해서 변수 두개를 넣어주었다. 그러면 두 개의 {} 괄호에 변수 두 개가 차례로 들어가서 출력이 된다.

여기서도 타입을 확인해 보면 아까 % 구분자로 넣었을 때와 같이 모두 str 타입으로 변환되어 있는 것을 알 수 있다. 즉 ” ~~ ” 안에 넣은 애들은 무조건 문자형으로 바뀌어서 print 문을 받는다고 생각하면 되겠다.

print 출력포맷 예제

.format() 함수를 사용할 때 이용할 수 있는 기능이 있다. 위와 같이 {} 괄호를 여러개 지정했을 경우, 괄호안에 숫자를 넣어서 몇 번째 변수의 자리가 될 지 지정해줄 수 있다.

오른쪽에 .format안에 temp , day 순으로 넣어놨는데 실제 출력문에는 순서가 바뀌어서 들어가야 한다. 이 때 괄호안에 번호를 1, 0 으로 거꾸로 써주면 변수가 순서대로가 아닌 숫자 지정해준 대로 들어간다. 단 파이썬에서 다른 경우도 그렇듯이 여기서도 숫자 0부터 시작한다.

이제 소수점 자리수와 패딩 기능으로 정렬하는 방법에 대해 알아보자.

print 출력포맷 예제

위에 % 구분자와 .format() 함수를 이용하여 출력한 예시를 보자.

%10s 에서 s는 문자열이라는 의미이고 10은 자리수를 말한다. 즉 10칸을 만들고 거기에 문자열을 출력하라는 뜻이다. 이 때 차이점이 있는데 % 구분자의 경우 10칸을 만든 뒤 우측정렬로 출력하고, .format() 함수에서는 10칸을 만들고 좌측정렬로 출력하였다.

print 출력포맷 예제

그럼 정렬을 바꾸려면 어떻게 해야할까? %구분자의 경우 위와같이 마이너스 기호 -를 넣어주면 되고, .format() 함수에서는 칸수 앞에 >를 넣어주면 정렬이 반대로 된다.

뒤쪽에 %f 로 120이라는 정수형 값을 실수형태로 보여지도록 하였는데, 여기서 10.2의 의미는 10칸 자리에 .2 소수점 두번째 자리까지 표시한다는 뜻이다. 실제로 앞에 공백이 많이 남고 120.00으로 표시됨을 알 수 있다.

마지막으로 네임을 지정해서 불러오는 방법이다.

print 출력포맷 예제

이렇게 불러올 값을 %구분자에서는 {‘name’=’이름’} 형태로, .format() 함수에서는 name=’이름’ 형태로 지정해 준 뒤 출력문에 그 name을 가져오는 방식도 있다. 지금은 굳이 이렇게 해줄 필요가 없지만 나중에 복잡한 프로그래밍을 하다보면 유용한 방법이니 이런게 있구나 하고 알고 넘어가면 된다.

% 구분자에서와 .format() 함수에서 괄호처리 : 또는 =를 사용하는 방식등의 차이가 있어서 헷갈리는데 이건 뭐 암기한다고 되는건 아니고 직접 이런저런 코딩을 해보다 보면 자연스럽게 익숙해질 것이다.