IT 이야기/프로그래밍 언어

Python 실수 포맷팅

비스 2021. 11. 30. 00:14

여태 검색 자유인 코딩테스트만 보다가, 지난주에 처음으로 검색 안되는 코테를 보고 나서 파이썬 문법과 좀 더 친해져야 할 필요성을 느끼게 되었다. 그렇게 시작한 코드업 파이썬 기초 100제에서 다소 생소했던 문법을 하나 찾아 복습겸 포스팅.

 

 

 

코드업 6043번

 

처음에는 단순하게 아래처럼 round함수를 이용해 코드를 작성했다.

f1, f2 = map(float, input().split())
output = round(f1 / f2, 3)
printf(output)

그런데 이렇게 했더니 통과가 안되는 테케가 나왔다. 문제에서는 output 변수가 실제 소수점 몇 자리인지를 불문하고 무조건 소수점 세자리 형태로 출력되게 하기를 요구했는데, 내 코드는 딱 유효값만을 표시했다.

 

실제 이 문제의 제대로 된 코드는 아래와 같다.

 

f1, f2 = map(float, input().split())
output = f1 / f2
print("{:.3f}".format(output))

 

f1, f2 = map(float, input().split())
output = (f1 / f2)
print(f'{output:.3f}')

 

둘 중 어느 쪽으로 하더라도 정상작동한다. 10.000과 같은 수는 '실수'를 표시하는 float형태로는 표현할 수 없고, 문자열 포맷팅을 통해 구현해야 한다. 

 

 

 

format 함수 사용법

 

표현하고자 하는 문자열에 {}와 인덱스를 적고, format 함수의 인자로 삽입하고자 하는 문자열 데이터 형태를 넣어주면 된다.

apple = '사과'
banana = '바나나'
grape = '포도'

print("과일바구니: {}, {}, {}".format(apple, banana, grape))
print("과일바구니: {0}, {1}, {2}".format(apple, banana, grape + apple))
print("과일바구니: {2}, {1}, {0}".format(apple, banana, grape))

출력결과

 

인덱스를 넣어준다면 인덱스 순서대로, 그리고 인덱스가 없다면 그냥 첫 괄호부터 format 함수에 기재한 순서대로 들어간다.

 

(+) 여담

 print함수에서 요소를 출력할 때 ,로 구분하면 자동으로 띄어쓰기가 한 자 들어가고 +로 구분하면 concat 형태로 붙어서 출력되더라... 이걸 여태 몰랐네