1. 연산을 이용한 문자열의 출력.
지난 포스팅에서,
1. Python의 print()함수는 크게 숫자형태와 문자형태를 출력할 수 있다.
2. 선언된 변수에 저장한 뒤, print()함수에 변수를 인자(함수의 괄호 안에 들어가는 값)로 넣어서 출력도 가능하다.
라는 내용을 언급했다.
그런데, 이번 포스팅의 첫 제목이 조금 이상하다. 연산을 이용한 문자열의 출력. "어?? 문자로는 연산을 할 수 없지 않나요??" 맞다. 우리가 아는 한도에서 ㄱ+ㅏ 가 "가"가 되지는 않는다. 가가 가가? 그럼 필자가 소제목에서 언급한 저 내용은 무엇을 말하는 것일까?
Python 인터프리터 모드에서 다음과 같이 입력해보자.
---------------------------
print("I am a " + "boy")
---------------------------
"이 코드가 실행이 되지 않을 것 같은데요?? 쟤네는 문자열이지 숫자가 아니잖아요." 그러나, 우습게도 파이썬은 이 연산이 가능하다. 문자열 사이에 '+'가 위치할 경우, '+' 연산자는 문자열을 서로 이어주는 역할을 한다. 조금 변태스럽긴 하지만, 한글도 받침없는 문자는 대략적인 모양새가 나타나도록 출력할 수도 있다.(물론 이렇게 출력된 문자는 문자로의 기능은 거의 못한다)
문자열은 덧셈 뿐만 아니라, 곱셈도 가능하다. 가령, 만약 여러분들이 무엇인가 반복적인 단어 - 예를 들면, "대한민국" -를 몇 백 번 출력해야한다고 가정해보자. 그러나 출력을 위해 print("대한민국 대한민국 대한민국...")이라는 명령어를 입력하는 것은, 바로 앞에 있는 컴퓨터를 모욕하는 일이다. 다음과 같이 해보자.
"대한민국 "이라는 문자열을 100개 출력했다. 물론, 필자가 직접 100개가 다 출력했는지 직접 확인하지는 않았지만 말이다. 위의 예시들처럼, '+'와 '*' 연산자를 사용하면, 자칫 노가다가 될 수 있는 코드 입력을 스마트하게 끝낼 수 있다. 조금 더 우아하게 하고 싶다면, 저 "대한민국 " 이라는 문자열을 변수에 넣어서 출력을 해도 괜찮겠다. 아래와 같이.
지금까지 입력한 문자열을 유심히 살펴본, 눈썰미가 좋으신 분들이라면, 모든 문자열의 끝에 공백이 추가로 들어가 있는 것을 발견하셨을 것이다. 저 공백이 없다면, 위의 대한민국 출력물은 "대한민국대한민국대한민국...." 처럼 가독성이 떨어지는 형태로 나타나게 되었을 것이다. 필자가 하고 싶은 말은, 공백 역시 따옴표 안에 들어갈 경우, 하나의 문자열 취급을 받는다는 것이다. 그래서 저 nation의 문자 길이를 Python으로 출력하라고 명령하면, 파이썬은 4(네 글자)가 아닌 5(다섯 글자)라는 값을 돌려준다.
나중에 포스팅 할, len()이라는 함수는 문자열의 길이를 숫자형태로 반환하여 출력하는 함수이다. 이 함수 역시 일련의 연산과정을 통해, 값을 출력하도록 프로그래밍 되어 있는데, nation이라는 변수에 선언된 변수 값("대한민국 ")의 길이를 구하는 과정에서, 공백문자도 배재하지 않고 출력을 하는 것을 볼 수 있다.
마지막으로 하나 더, 그럼 숫자와 문자열은 연산이 가능할까?? 곱셈을 제외하면, 불가능하다. 직접 print(13 + "문자열")을 입력해서 어떤 결과가 돌아오는지 보자. 아마 아래와 같이 TypeError 메세지가 나타나면서, Int(숫자형 - Integer)와 Str(문자형 - String)은 '+' 연산자가 지원할 수 없다는 문구가 보일 것이다.
이 문제를 해결하기 위한 방법은 여러가지가 있다. 숫자 13 옆으로 따옴표를 사용하던지, 아니면 숫자 13을 문자열로 생각하고 연산하도록 컴퓨터에게 명령하던지 등등등...
* 왼쪽 예시의 아래에 보이는 형태는 13이라는 숫자를 문자열로 변환해서 연산을 진행하도록 만든 것이다. 이처럼 출력물의 형태를 강제로 변환하는 것을 Type-casting이라고 하는데, 문자열이 숫자로만 이루어진 경우, 역으로 형태를 변경하는 것도 가능하다.
하지만 위의 예시들은, 다음에 배울 포멧팅에 비하면 너무나도 번거롭다...
2. print()함수의 포멧팅(Formating) 기능
필자는 필자 앞에 있는 사람의 성별과 사는 곳을 다음과 같이 "I am a boy, 15 years old and live in Seoul." 와 같은 형태로 출력하고 싶다. 이를 위해 성별을 저장하는 gender라는 변수, 나이를 저장하는 age 변수, 그리고 주소를 저장하는 addr라는 변수를 만들었다. 그리고, 필자 앞에 선 첫 번째 사람이 자신의 성별과 나이, 주소를 "남성", "15", "일산"이라고 알려준다. 지금까지 배운 내용으로 이를 작성해 볼까??
만약, 한 사람의 정보만 입력한다면 뭐... 이 방식도 나쁘진 않다. 그러나 여러 사람을 입력해야 할 경우에는 너무나 번거로워진다. 이러한 번거로움을 줄이기 위해 만들어진 것이 바로 print()함수에서 제공하는 포멧팅(Formating) 기능이다.
필자가 아무리 이 기능이 뭣인지 떠들어봐야 입만 아프니, 아래의 예제를 보자.
print()함수 내의 문자열에 위치한 {}에, 필자가 넣고자 하는 변수의 값이 모두 삽입되어 출력되는 것을 확인할 수 있다.
그리고, {}내에 들어가는 변수는, 모두 문자열이 끝나는 위치에 존재하는 .format()의 괄호 안에 순서대로 위치하고 있음을 알 수 있다.
이처럼, 여러 개의 변수를 한 문자열 내에서 출력해야 할 때, "+" 연산자의 도움 없이 포멧팅을 사용하여 쉽게 문자를 출력할 수 있다.
포멧팅을 사용하면, 변수에 저장된 값이 문자열이던, 숫자형이던, 형 변환 없이도 출력이 가능하다는 장점이 있다.
포멧팅을 사용할 시, 주의해야 할 점은, 문자열 안에 들어간 {} 괄호의 갯수와, .format() 내에 위치하는 변수의 갯수가 일치해야 한다는 점이다. 만약, 이 갯수가 일치하지 않으면, 컴퓨터는 IndexError라는 메세지를 출력하게 된다.
다음 포스팅에서는 print()함수의 .format()기능을 사용하여, 문자 출력을 깔끔하게 할 수 있는 방법에 대해 이야기하겠다.
2019.07.23 추가 내용
리눅스에 기본적으로 내장된 파이썬 2버전을 사용하시는 분들은, 위의 방식으로 포맷팅을 적용할 수 없다. 하지만 비슷한 방식으로 포맷팅과 유사한 효과를 낼 수 있는 방법이 있다.
==================================
name = "Angelina"
print("My name is %s" %name)
==================================
만약 복수의 변수를 출력하고 싶다면 다음과 같이 진행한다.
=====================================
name = "Angelina"
age = 22
print("My name is %s and %s years old." %(name, age))
=====================================
대괄호 쌍{}과 .format을 %가 자리를 대신 차지한다고 생각하면 된다.
이 방법이 싫다면 3버전으로 업데이트를 해야된다...
'Python > Python Basic' 카테고리의 다른 글
6. Python - 변수 자료형 1, LIST(목록) (0) | 2019.07.26 |
---|---|
5. Python - print() 함수 사용법 3 (0) | 2019.07.17 |
3. Python - print() 함수 사용법1 (0) | 2019.07.03 |
2. Python의 설치와 프로그래밍의 원리 (0) | 2019.07.02 |
1. Python. (0) | 2019.06.30 |
댓글