안녕하세요. 이번에 소개할 글은 문자열 포매팅 방법에 대해 정리한 글로서, 총 3편으로 이루어진 시리즈 포스팅입니다.
파이썬에서 문자열 포매팅 방법으로는,
- format 함수를 이용한 방법
- %와 서식기호를 이용한 방법
- f-string을 이용한 방법
위 세가지가 있습니다.
오늘은 format 함수를 이용해서 문자열을 출력하는 방법에 대해 알아보겠습니다.
<content>
1.format 함수란?
2.format 함수 예제1 (기본)
3.format 함수 예제2 (응용)
4.format 함수를 이용해서 구구단 프로그램 출력 해보기
1.파이썬 함수, format()에 대해서
우리가 포매팅을 사용하는 이유는 단순합니다.
'노가다'를 줄이고자 상수가 아닌 변수를 사용하고, 변수를 사용하는 과정에서 사용자가 원하는 값을 넣어주게 되는데,
이때 넣어주는 값이 사용자가 보기에 숫자일지라도, 컴퓨터가 보기에는 단순 문자열일 수 있습니다.
(타입체크를 했을때, 'str'이 나올 수 있다는 얘기죠. ㅎㅎ)
좀더 'deep'하게 들어가 보겠습니다.
예를 들어, 우리가 구구단 프로그램을 만든다고 헀을떄,
print('2 * 3 = 6') 요런 식으로 '노가다'를 해서 문자열을 만들지는 않잖아요?ㅎㅎ
2도 변수(variable), 3도 변수(variable), 그리고 return value인 6도 결국에는 변수로 사용되고 있을텐데,
이런 형태의 문자열을 formatting 해서! 문자열을 재사용하도록 하는 것입니다!
곧 배우겠지만! format함수를 사용하면 이렇게 되겠죠?
a = 2
b = 3
print('{0} * {1} = {2}'.format(a, b, a*b))
-> 요렇게 짜고 실행하면, "2 * 3 = 6" 이렇게 나오겠죠?
아마 이전에 '자바'언어를 배워보신 적이 있으시다면, '캡슐화'라는 단어를 들어보셨을 겁니다.
(모르신다면, 그냥 '무언가를 감싼다'라고 이해해도 여기서는 무방할 것 같습니다.)
캡슐화처럼 위 수식을 variable인 s에 넣고,
그 s를 출력해봅시다.
s = '구구단> {0} * {1} = {2}'.format(a, b, a*b)
print(s)
" '구구단> {0} * {1} = {2}'.format(a, b, a*b) "을 보면 (마치 c언어의 형식지정자와 같이) 중괄호를 이용해서 format()
함수에서 넣어줄 것들을 표기해줍니다. ({0}부터 순서대로 데이터가 박히도록 약속되어 있습니다.)
=> format() 함수의 인자로서 순서대로 넣을 변수들을 지정해줍니다.
2.파이썬 문자열 format 함수 예제 (기본)
2-1) 직접 대입? 변수로 대입? 이름으로[키로] 대입? 대체 무슨차이고??
코드>
결과>
이와 같이, format 함수의 인자로 직접 값을 입력하거나, 변수를 이용하거나, 직접 값 하나하나에 이름을 지어주고,
해당 이름을 키로서, 이용해도 됩니다.
(참 유용하지 않나요?ㅎㅎ)
2-2)format 문자열의 중괄호의 인덱스를 활용해보기!
코드>
결과>
첫번째 출력을 통해서, 기본적으로 중괄호에 들어가는 인덱스의 순서가 오른차순이라면,
생략해도 무방하다는 것을 알 수 있겠습니다.
그리고
두번째 출력을 통해서, 인덱스를 입력하되, 그 순서를 자유자재로 바꿈으로써, 출력에 포매팅되는 인자들의 위치를 자유자재로 바꿔볼 수도 있습니다.
마지막으로
세번째 출력을 통해서, 인덱스를 중복해서 입력함으로써, 동일한 인자를 여러번 가져오는 것도 가능하죠!
2-3)format 함수를 사용할때 중괄호가 나오게 하라면 어떻게 해야 할까?
코드>
결과>
첫번째 출력을 통해, 중과호를 한번 출력하려면, 중괄호를 두번 입력해줘야 합니다.
(마치, c언어에서 \(역슬래시)를 출력하고자, 이스케이프 문자로서 \\(이중 역슬래시)를 써준것과 유사하죠.)
두번째 출력을 통해서는, 안쪽 중과호로 묶여있는 'abcde'도 정상적으로 하드코딩되서 출력되는 것을 볼 수 있습니다.
세번째 출력을 통해 중괄호로 감싸진 format의 인자값을 받으려면, 중과호를 이중이 아닌 삼중으로 처리해야 하는 것을
알수가 있겠습니다. 지금까지 본 결과를 통해 대충 아래와 같은 순서도가 만들어진다고 짐작할 수 있을 것 같습니다.
3-1)문자열 정리하기(문자열에 공백값 채우기)
코드>
결과>
1>s9(첫번째 출력)
#중괄호 안에서 왼쪽부터 첫번째 숫자는 인자의 인덱스 번호이고, 두번째 숫자는 그 인자가 들어갈 공간의 사이즈를 말합니다. 기호'<'은 왼쪽 정렬을 뜻합니다.
#{0:<10} -> 10개의 공간을 확보하고 왼쪽 정렬이니, 왼쪽부터 'left'을 채워넣습니다.
#{1:<5} -> 5개의 공간을 확보하고 왼쪽정렬이니, 왼쪽부터 'aa'를 채워넣습니다.
2>s10(두번째 출력)
#중괄호 안에서 왼쪽부터 첫번째 숫자는 인자의 인덱스 번호이고, 두번째 숫자는 그 인자가 들어갈 공간의 사이즈를 말합니다. 기호 '>'은 오른쪽 정렬을 뜻합니다.
#{0:>10} -> 10개의 공간을 확보하고 오른쪽 정렬이니, 오른쪽부터 'right'를 채워넣습니다.
#{1:>5} -> 5개의 공간을 확보하고 오른쪽 정렬이니, 오른쪽부터 'bb'를 채워넣습니다.
3>s11(세번째 출력)
#중괄호 안에서 왼쪽부터 첫번째 숫자는 인자의 인덱스 번호이고, 두번째 숫자는 그 인자가 들어갈 공간의 사이즈를 말합니다. 기호 '^'은 중앙정렬을 뜻합니다.
#{0:^10} -> 10개의 공간을 확보하고 중앙정렬이니, 양쪽에 공백을 두고 중간에 'center'를 채워넣습니다.
#{1:^5} -> 5개의 공간을 확보하고 중앙정렬이니, 양쪽에 공백을 두고 중간에 'cc'를 채워넣습니다.
(단, 공간 크기가 홀수이고, 인자크기가 짝수라면, 한칸 왼쪽으로 당겨져서 출력됩니다.)
3-2)문자열에 공백이 아닌 값 채우기
코드>
결과>
1>s9(첫번째 출력)
#중괄호 안에서 왼쪽부터 첫번째 숫자는 인자의 인덱스 번호이고, 두번째 숫자는 그 인자가 들어갈 공간의 사이즈를 말합니다.
#기호 '<' 은 왼쪽정렬을 뜻하고, 해당 기호 앞에 있는 문자는 그 공간에 기본적으로 채워질 문자입니다.
#{0:-<10} -> '-'로 채워진 10개의 공간을 생성하고, 왼쪽정렬이니, 왼쪽부터 'left'를 채워넣습니다.
#{1:o<5} -> 'o'로 채워진 5개의 공간을 생성하고, 왼쪽부터 'aa'를 채워넣습니다.
2>s10(두번째 출력)
#중괄호 안에서 왼쪽부터 첫번쨰 숫자는 인자의 인덱스 번호이고, 두번째 숫자는 그 인자가 들어갈 공간의 사이즈를 말합니다.
#기호 '>'은 오른쪽 정렬을 뜻하고, 해당 기호 앞에 있는 문자는 그 공간에 기본적으로 채워질 문자입니다.
#{1:0>5} -> '0'으로 채워진 5개의 공간을 생성하고, 오른쪽부터 'bb'를 채워넣습니다.
3>s11(세번째 출력)
#중괄호 안에서 왼쪽부터 첫번쨰 숫자는 인자의 인덱스 번호이고, 두번째 숫자는 그 인자가 들어갈 공간의 사이즈를 말합니다. 기호'^'은 중앙정렬을 뜻합니다.
#{0:.^10} -> '.'으로 채워진 10개의 공간을 생성하고, 중앙정렬이니, 양쪽에 공백을 두고 중간에 'center;를 채워넣습니다.
#{1:@^5} ->'@'으로 채워진 5개의 공간을 생성하고, 중앙정렬이니, 양쪽에 공백을 두고 중간에 'cc'를 채워넣습니다.
3-3)자리수와 소수점 표현하기
->마치 c언어의 형식지정자를 활용하여 자리수와 소수점을 표현하는 것과 유사합니다.
4.구구단 프로그램 만들어보기(※format함수를 이용해서 자릿수 맞추기)
코드>
결과>
->기본적으로 구구단, 4단과 5단만 표시해보았습니다.
하지만 기본적으로 왼쪽정렬이 되니, 오른쪽 정렬로 바꾸어보겠습니다.
코드>
결과>
※주의
개인적으로 '<', '>', '^'와 같은 기호를 넣어주는 것을 잊지 말아주셨으면 합니다. 위와 같이 {2:2}로만 표시하면,
그게 왼쪽정렬인지, 오른쪽정렬인지 가늠하기가 어렵습니다. 아래 코드를 참고하세요!
코드>
결과>
이상으로, 문자열 포매팅 방법 중 하나인, format 함수를 이용한 방법에 대해서 알아보았습니다.
감사합니다.
참고/출처:
https://blockdmask.tistory.com/424#none
'Grammer' 카테고리의 다른 글
클래스의 개념에 대해 (0) | 2023.06.03 |
---|---|
파이썬으로 복소수 표현하기! (0) | 2023.04.22 |
댓글