print() 함수에 서식을 줌으로 해서, 출력 결과를 멋지게 만들어 줄 수 있다.
방법1 : 문자열 포맷팅 - 파이썬의 `format`은 중괄호 표시의 위치에 주어진 인자들의 값을 치환해 넣음
format(실수, ‘전체자릿수.소수이하자릿수<서식기호>’)
>>>print(format(123.45678, '10.3f'))
123.457
>>>print(format(123.45678, '10.3')) #과학적 표기법으로 출력.
1.23e+02
>>>print(format(123, '10d')) #정수에 대한 전체 자리수 지정.
123 #앞 7자리는 공백으로 채워진다.
중괄호 표시에 다음과 같이 좀 더 상세히 세부사항을 지정가능
# 소수점 이하 셋째 자리까지 부동 소수점(f) 숫자 표기 (0.333)
>>>print ('{0:.3f}'.format(1.0/3))
# 밑줄(_)로 11칸을 채우고 가운데 정렬(^)하기 (___hello___)
>>>print ('{0:_^11}'.format('hello'))
# 사용자 지정 키워드를 이용해 (Swaroop wrote A Byte of Python) 표기
>>>print ('{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python'))
방법2 : print('메시지와 출력 서식%(출력자료))
>>>print('서식에 의한 자료 출력 %s %d %f'%('문자열', 5, 23.4))
print('서식에 의한 자료 출력 %s %d %f'%('문자열', 5, 23.4))
|
%와 함께 사용하는 형식 기호(Format Symbol with %) |
변환 (Conversion) |
|
%c |
문자 (character) |
|
%s |
str() 메소드를 사용해서 문자열로 변환한 후 formatting |
|
%i |
부호가 있는 십진법 정수 (signed decimal integer) |
|
%d |
부호가 있는 십진법 정수 (signed decimal integer) |
|
%u |
부호가 없는 십진법 정수 (unsigned decimal integer) |
|
%o |
8진법 정수 (octal integer) |
|
%x |
소문자의 16진법 정수 (hexadecimal integer, lowercase letters) |
|
%X |
대문자의 16진법 정수 (hexadecimal integer, UPPERcase letters) |
|
%e |
소문자 'e'를 사용한 지수 표기 (exponential notation with lowercase 'e') |
|
%E |
대문자 'E'를 사용한 지수 표기 (exponential notation with UPPERcase 'E') |
|
%f |
부동소수형 실수 (floating point real number) |
|
%g |
%f(부동소수형 실수)와 %e (소문자 'e' 지수 표기) 의 단축형 표기 |
|
%G |
%f(부동소수형 실수)와 %E(대문자 'E' 지수 표기)의 단축형 표기 |
방법3 : 파이썬 3.x에 추가된 함수
>>>print('이름:{0}, 가격:{1}'.format('마우스', 5000))
이름:마우스, 가격:5000
서식과 대응 자료의 순서 갯수가 일치한 경우 { } 안의 인덱스는 생략이 가능하다
>>>print('이름:{}, 가격:{}'.format('마우스', 5000))
서식과 대응 자료의 순서 갯수가 일치하지 않는 경우는 { } 안의 인덱스를 생략하지 않는다
>>>print('이름:{1}, 가격:{0}'.format(5000, '마우스'))
출력 서식보다 대응 자료가 많으면 대응자료의 일부는 무시된다.
>>>print('이름:{0}, 가격:{1}'.format('마우스', 5000, '마우스', 5000))
이름:마우스, 가격:5000
출력 서식의 { } 안의 인덱스 순서가 동일한 것이 복수 개 만큼 대응 자료가 출력된다.
>>>print('이름:{0}, 가격:{1} 이름:{0}, 가격:{1}, 가격:{1}'.format('마우스', 5000))
이름:마우스, 가격:5000 이름:마우스, 가격:5000, 가격:5000
* print 출력 서식 연습에 대해 부연 설명을 해 본다.
print(format(1.5678, '10.3f'))
print('나는 나이가 %d 이다.'%23)
print('나는 나이가 %s 이다.'%'스물셋')
print('나는 나이가 %d 이고 이름은 %s이다.'%(23, '홍길동'))
print('나는 나이가 %s 이고 이름은 %s이다.'%(23, '홍길동'))
print('나는 키가 %f이고, 에너지가 %d%%.'%(177.7, 100))
print('이름은 {0}, 나이는 {1}'.format('한국인', 33))
print('이름은 {}, 나이는 {}'.format('신선해', 33))
print('이름은 {1}, 나이는 {0}'.format(34, '강나루'))
방법4 : f-string (파이썬 3.6+)
f-string은 문자열 앞에 f를 붙이고, {} 안에 **변수/식(expression)**을 바로 넣어 출력하는 방식이다. 가독성이 좋고 가장 많이 쓰인다.
1) 기본 사용
name = "마우스"; price = 5000; print(f"이름:{name}, 가격:{price}") # 이름:마우스, 가격:5000
2) 식(Expression)도 바로 가능
a = 10; b = 3; print(f"a+b={a+b}, a/b={a/b}") # a+b=13, a/b=3.3333333333333335
3) 소수점 자리수/폭 지정 (format과 동일한 서식 사용). {값:서식} 형태로 format()의 포맷 사양을 그대로 쓴다.
x = 123.45678; print(f"{x:10.3f}") # 123.457
print(f"{x:10.3}") # 과학적 표기법 가능 1.23e+02
n = 123; print(f"{n:10d}") # 123
4) 정렬 / 채움 문자
print(f"{'hello':_^11}"); # ___hello___
print(f"{'hi':*>10}") # 오른쪽 정렬, *로 채움. ********hi
5) 퍼센트(%) 출력 : %는 서식문자처럼 해석되지 않으니 그냥 쓰면 된다. 단, %를 “문자 그대로” 강조하고 싶으면 아래처럼 해도 OK.
energy = 100; print(f"에너지가 {energy}% 입니다.") # 에너지가 100% 입니다.
6) 천 단위 콤마, 진수, 부호 등
money = 123456789; print(f"{money:,}") # 123,456,789
num = 255;
print(f"{num:b}") # 11111111 (2진수)
print(f"{num:x}") # ff (16진수)
v = 7; print(f"{v:+d}") # +7
7) 딕셔너리/객체 출력
student = {"id": 1, "name": "홍길동"}; print(f"{student['id']} / {student['name']}") # 1 / 홍길동
8) 디버깅용: 변수명=값 출력 (=)
x = 10; y = 20; print(f"{x=}, {y=}") # x=10, y=20