콘텐츠로 건너뛰기
Home » Python 101 : 출력과 문자열 (1)

Python 101 : 출력과 문자열 (1)

10년전에 작성했던 파이썬 강좌글을 틈틈히 최신 버전에 맞게 수정하고 내용을 수정/보강하여 재발행하는 글입니다. 만성적인 귀찮음 때문에 연재도 중간에 그냥 그만두었었는데, 이번에는 언제까지 해 나갈 수 있을까요?

어떤 프로그래밍 언어를 공부하든간에 거의 가장 처음 접하게 되는 것이 어떤 값을 화면에 출력해보는 것이다. 사실 출력과 관련된 부분에 대해서도 좀 알아두어야 할 것이 많지만 다른 것들은 뒤로 미루고 오늘은 간단하게 출력만 하는 것에 대해서 살펴보고자 한다. 왜냐하면 코드 너머에서 실제로 벌어지고 있는 일들은 우리 눈에 보이지 않기 때문에 “코드가 제대로 실행되는지”, “값은 제대로 계산되는지” 같은 궁금한 점을 확인해 볼 수 있는 유일한 방법은 어떤 값을 화면에 찍어보는 것이 가장 빠르고 확실하기 때문이다.

그래서 파이썬을 처음 시작하는 사람을 위해서 소개할 첫번째 함수는 바로 print()이다. 물론 이쯤에서 함수가 무엇인지…같은 걸 설명하는 게 빠진 것 같지만, 그것은 기분 탓이니까 우선은 넘어가도록 하자. 아무런 시작도 안했는데 이런 걸 설명하기 시작하면 끝도 없어질 것 같다.

print() 함수는 전달받은 값을 화면에 한줄로 출력하는 기능이다. 값을 출력할 때에는 자동으로 줄바꿈문자를 덧붙이기 때문에, 이 함수를 연속해서 사용하면 이전에 출력된 다음 줄에 값이 출력된다. 문자열을 출력할 때, 문자열은 홑따옴표나 겹따옴표로 감싸서 써주면 된다. 둘을 구분하지는 않지만 양쪽 따옴표 기호는 같은 것을 사용해야 한다.

print(1)
# => 1
print("hello")
# => hello

print() 함수에는 하나가 아닌 여러 개의 값을 전달해서 한 줄에 출력할 수도 있다. 이 때에는 콤마를 사용해서 여러 값을 구분해준다. 콤마로 구분된 값은 출력할 때 공백으로 구분돼서 출력된다. 다음 예제는 하나의 print() 함수에 여러 값을 전달하여 출력하는 예를 보여준다. 여기서 'hello' 를 겹따옴표 안에 홑따옴표가 포함되어 있는 모양을 눈여겨봐두자. 따옴표 내부에 다른 모양의 따옴표는 일반적인 글자처럼 취급된다.

print(1, "hello")
# => 1 hello
print("number:", 1, "|", "greet:", "'hello'")
# => number: 1 | greet: 'hello'

변수 출력하기

이전 예제에서 출력에 사용했던 1 이나 "hello" 는 모두 ‘상수표현’이다. 이렇게 상수 표현 외에 변수 이름을 넣어서 그 변수가 가리키는 값을 출력할 수도 있다. 단순히 변수 이름만 가지고 값을 출력하는 것 외에 변수를 포함하는 계산식을 전달해서 그 계산 결과를 출력하게 할 수도 있다.

a = 1
print(a)
# => 1
print(a + a)
# => 2
print(a + a + a, a * 4)
# => 3 4

변수를 사용하는 방식이 상수와 같아서 시시해 보일 수도 있는데, 사실 print() 함수의 가장 주된 용도가 바로 변수값을 확인하는 것이다. 계산을 수행한 결과를 다음과 같이 출력해 볼 수 있을 것이다.

a = 0
for i in range(1, 11):
  a = a + i
print("1~10의 합:", a)

문자열

print(1)print("hello") 의 차이점은 무엇일까? 다른 것은 1"hello" 이므로 이는 결국 이 둘의 차이를 묻는 것과 같다. 1은 정수 타입의 값으로 우리가 잘 알고 있는 정수 1을 나타내는 표현이다. (두 개 더하면 2가 되는 그 1이 맞다.) 그리고 “hello” 라고 표기하는 것은 문자열을 나타낸다. 문자열은 말 그대로 하나 이상의 문자가 연속하여 모여있는 형태를 말한다. 언어에 따라서 단일 문자와 문자열을 구분하는 경우가 있는데, (C언어의 경우, 문자열은 단일 문자 형태인 char 타입의 배열이다.) 파이썬에는 그러한 구분 없이 한 글자 이상의 문자는 모두 문자열로 취급된다.

컴퓨터에서 문자는 내부적으로 어떤 숫자값(코드값)이다. 어떤 숫자값이 특정한 글자를 나타내는 것으로 미리 약속을 정해놓고, 그러한 약속에 따라서 문자열을 표현하는 것이다. 이러한 약속의 대표적인 것으로 아스키코드가 있다. 아스키코드는 127가지의 숫자를 문자에 할당해놓은 것인데, 영어 알파벳 52자 (대문자와 소문자 각각 26자), 아라비아 숫자 10자 및 그외 기본적인 문장부호나 기호와 제어문자 등을 포함하고 있다.

이러한 아스키코드는 간결하지만 다양한 언어에서 사용되는 문자를 모두 표현하기에는 턱없이 부족하기 때문에 유니코드라는 것이 제정되었으며, 현재 유니코드는 지구상에서 사용되거나 사용되었던 거의 모든 문자를 포함하는 거대한 테이블이다. 우리가 스마트폰에서 흔히 사용하는 이모지들도 모두 유니코드에 등록되어 있는 ‘문자’이다.

2022년을 기준으로 현재 파이썬의 최신 버전은 3.10이며, 파이썬 3.0부터는 파이썬 내부적으로 모든 문자열은 유니코드로 취급된다. 유니코드 문자열을 파일로 저장하거나, 네트워크로 전송하는 등의 일을 할 때에는 인코딩이라는 것이 관련되는데, 인코딩에 대해서는 기회가 있을 때 다시 설명하도록 하겠다.

print() 함수로 출력할 수 있는 값은 사실 문자열이다. 하지만 실질적으로 문자열이 아닌 정수나 실수값도 이 명령을 사용해서 화면에 출력할 수 있다. print(1) 이라는 명령은 정수값 1을 출력하는 것인데, 실제로는 1이 아닌 문자열 "1"을 화면에 출력한다. 파이썬은 어떤 객체를 화면에 출력하려 할 때에 내부적으로 그 값을 문자열로 변경하는 처리를 거친 후에 출력한다. 정수나 실수 타입의 값들은 그 내부에 자신의 값을 문자열로 표현하는 방법을 내장하고 있기 때문에 이러한 처리가 자동으로 가능하다.

파이썬에서 문자열을 만드는 방법

파이썬 코드에서 문자열을 작성하는 몇 가지 문법에 대해서 소개하겠다. 기본적인 방법만 알고 나머지는 이런 것들이 있더라 하는 정도로만 보고 넘어가면 되겠다. 나중에 필요할 때에 다시 설명할 것이다.

  • 겹따옴표로 둘러싼 영역은 문자열이다. ("hello")
  • 홑따옴표로 둘러싼 영역은 문자열이다. ('hello')
  • 겹따옴표 세 개, 홑따옴표 세 개로 둘러싼 영역을 만들 수 있는데, 재밌는 점은 삼중 따옴표로 둘러싼 영역은 중간에 엔터를 눌러서 여러줄에 걸펴서 작성할 수 있으며, 이 때에는 문자열에 줄바꿈문자까지 포함되어 만들어진다. 출력해야 할 내용이 여러줄로 길 때 사용하기에 적절하다.
  • 따옴표 앞에 r 을 붙이면 raw 문자열을 만든다. 음.. raw 문자열은 백슬래시(\) 문자를 포함해야 할 때, 백슬래시를 입력하는 횟수를 줄이는 용도로 사용하는데, 정규식을 생성할 때 사용한다.(고 알고 있으면 되겠다.)
  • 따옴표 앞에 b를 붙이면 바이트배열을 만든다. 역시 지금은 이런 것이 있구나 정도로 생각하면 된다.
  • 따옴표 앞에 f를 붙이면 포맷팅 문자열을 만든다. 조만간에 좀 더 자세히 살펴보게 될 것이다.

이렇게 따옴표 기호를 사용해서 입력한 코드 그 자체가 어떤 값이 되도록 하는 표현을 “리터럴”이라고 한다. 이 말이 “표기법”하고 정확하게 대응하는 말인지는 모르겠는데, 문법에 의해 약속되어 있는 표기법 정도로 이해하고 있으면 되겠다.

조금 더 자세히 살펴보는 print() 함수

print() 함수에는 하나 이상의 값을 전달해서 출력할 수 있다고 했고, 이렇게 여러 개의 값이 전달되는 경우에는 각 값이 공백으로 출력된다고 했다. print() 함수를 사용할 때에는 출력할 값 외에 함수의 세부적인 동작을 조절할 수 있는 추가적인 방법이 있다.

print(*objects, sep=" ", end="\n", file=sys.stdout, flush=False)

위의 코드는 print() 함수를 파이썬 표준 문서에서 찾았을 때 나오는 모양이다. = 부호가 들어가 있는 것들은 그 기본값(디폴트 값이라고 한다)이 미리 지정되어 있기 때문에 생략할 수 있다는 의미이다. 여기서 sep=end= 를 살펴보자. 먼저 end= 는 출력한 내용 뒤에 덧붙여줄 문자이다. \n 이라고 되어 있는 것은 개행 문자인데, 줄바꿈을 의미한다. print() 함수를 연속해서 사용했을 때, 매번 새로운 줄에서 내용일 출력되는 것인 이 때문이다. 그리고 sep=" " 라고 되어 있는데, 여러 개의 값을 출력할 때, 각 값 사이를 구분할 문자를 지정한 것이다.

print() 함수를 사용할 때 이러한 옵션을 조절하면 출력되는 모양을 조정할 수 있다. 하지만 이 부분은 특별하게 다루지 않겠다. 좀 더 세련된 다른 방법이 있고, 그러한 방법을 사용하도록 코드를 작성하는 방법이나 생각하는 방식을 연습하는 것이 더 중요하기 때문이다.

다음 글에서는 문자열 외에 다른 유형의 값에는 어떤 것들이 있는지 살펴보고, 변수 값을 문자열에 포함시켜서 출력하는 방법에 대해서 살펴보도록 하겠다.

%d 블로거가 이것을 좋아합니다: