11-09 09:15
Notice
Recent Posts
Recent Comments
관리 메뉴

BAN2ARU

[Python] 문자열 포맷팅 - format 및 f-string(formated string literal) 본문

Language/Python

[Python] 문자열 포맷팅 - format 및 f-string(formated string literal)

밴나루 2022. 4. 26. 19:21
반응형

python에서 문자열 포맷팅은 문자열 중간에 원하는 값(특정 변수)를 삽이하기 위하여 사용합니다. 만약에 학생 A(=70점), B(=55점), C(=85점)으로 시험평균점수가 70점일 때, 이를 print("학생들의 평균 점수는 70점입니다.")로 출력하는 프로그램이 있다고 가정해봅시다. 이를 70이라는 값 대신에 "avg = (A+B+C)/3"라는 변수로 넣는 방법에 대한 것입니다. 다음과 같이 변수로 지정해준다면 학생들의 시험 값(A,B,C)이 변하더라도 print에 직접 값을 수정할 필요없이 해당 부분이 avg 변수 값에 반영되어 출력이 될 것입니다! 그럼 각 방법에 대해 설명드리도록 하겠습니다.

 

[각 방법은 % 연산자, str.fomat, f-string 순으로 작성되어 있으며, f-string을 활용한 방식을 추천드립니다!]

 

% 연산자

 가장 기본적인 방법으로 % 연산자를 활용하는 방식입니다. % 연산자의 뒤에는 자료형을 나타내주어 %d는 정수, %f는 실수, %s는 문자열로 이 정도만 알아도 기본적인 구현에 문제가 없을 것 입니다!

예제 1 - %d와 %s

eval = 'Good Job!'
scoreA = 70
scoreB = 55
scoreC = 85

avg = (scoreA+scoreB+scoreC)/3

print("학생들의 평균 시험 점수는 %d점입니다." %(avg))
print("%s" %(eval))

#실행 결과
학생들의 평균 시험 점수는 70점입니다.
Good Job!

예제 2 - %f 

eval = 'Good Job!'
scoreA = 70
scoreB = 55
scoreC = 85

avg = (scoreA+scoreB+scoreC)/3

print("학생들의 평균 시험 점수는 %f점입니다." %(avg))
print("학생들의 평균 시험 점수는 %.2f점입니다." %(avg))

# 실행 결과
학생들의 평균 시험 점수는 70.000000점입니다.
학생들의 평균 시험 점수는 70.00점입니다.

%f의 default는 6자리의 소숫점자리의 수면 %.2f는 소숫점 2자리수 까지 표현되며 이와같이 %.(숫자)f를 통해서 소숫점 자리수를 지정해 줄 수 있습니다!

예제 3 - %연산자 여러개 일 때! 

eval = 'Good Job!'
scoreA = 70
scoreB = 55
scoreC = 85

avg = (scoreA+scoreB+scoreC)/3

print("학생들의 평균 시험 점수는 %d점입니다.\n%s" %(avg, eval))

# 실행 결과
학생들의 평균 시험 점수는 70점입니다.
Good Job!

위와 같이 %d ,%s로 각각 선언한 뒤 뒤에 %(d변수, s변수)로 순서대로 선언하시면 됩니다.

 

str.format : { }를 활용

 python에서는 %연산자보다 간단한 방식인 str.format을 활용한 방식이 있습니다. { }안에 index나 이름 또는 공백을 통해 formatting을 지정하고 뒤에 .format을 통해 값을 지정해주는 방식입니다.

예제 1 - { } 활용하기

scoreA = 70
scoreB = 55
scoreC = 85

avg = (scoreA+scoreB+scoreC)/3

print("학생 A는 {}점, 학생 B는 {}점, 학생 C는 {}점으로 평균 {}점입니다.".format(scoreA, scoreB, scoreC, avg))

# 실행 화면학생 
A는 70점, 학생 B는 55점, 학생 C는 85점으로 평균 70.0점입니다.

{ }를 선언하고 후에 .format(변수1, 변수2, 변수3, ... 등)을 통해 각기 값을 입력하면 다음과 같이 나오게 됩니다.

예제 2 - { }에 index를 통해 순서 지정하기

scoreA = 70
scoreB = 55
scoreC = 85

avg = (scoreA+scoreB+scoreC)/3

print("학생 A는 {1}점, 학생 B는 {0}점, 학생 C는 {2}점으로 평균 {3}점입니다.".format(scoreA, scoreB, scoreC, avg))

# 실행 화면
학생 A는 55점, 학생 B는 70점, 학생 C는 85점으로 평균 70.0점입니다.

다음과 같이 { } 중괄호 내부에 index를 지정하여 순서를 변경할 수도 있습니다.

예제 3 - { }에 이름 지정하기

scoreA = 70
scoreB = 55
scoreC = 85

avg = (scoreA+scoreB+scoreC)/3

print("학생 A는 {}점, 학생 B는 {}점, 학생 C는 {}점으로 평균 {score}점입니다.".format(scoreA, scoreB, scoreC, score=avg))

# 실행 화면
학생 A는 70점, 학생 B는 55점, 학생 C는 85점으로 평균 70.0점입니다.

다음과 같이 { } 중괄호 내부에 score와 같은 이름을 지정하여서 선언할 수도 있습니다!

 

f-string 활용 - 추천하는 방식

Python 3.6 이상부터 활용 가능한 방식이니 참고하시길 바랍니다! 앞의 방법들과 달리 뒤에 사용하고자하는 변수를 별도로 부여할 필요가 없어 직관적이며 속도도 빨라 추천드리는 방식입니다. f와 {}를 활용하는 방식인데 앞에 f를 선언하고 {}안에 삽입하고자하는 값이나 변수를 넣어주는 방식입니다. 아래 예제와 같이 위의 방식들에 비해 상당히 직관적이고 간결하게 작성되는 것을 볼 수 있습니다.

scoreA = 70
scoreB = 55
scoreC = 85

avg = (scoreA+scoreB+scoreC)/3

print(f"학생 A는 {scoreA}점, 학생 B는 {scoreB}점, 학생 C는 {scoreC}점으로 평균 {avg}점입니다.")

# 실행 화면
학생 A는 70점, 학생 B는 55점, 학생 C는 85점으로 평균 70.0점입니다.

 

Python의 문자열 포맷팅에 관해서 알아보았으며, 예제를 통해서 마지막에 설명드린 f-string 방식이 기존의 방법들에 비해 직관적이고 간결하게 작성되는 것을 볼 수 있습니다.

 

이상 작성 마치며, 혹시 추가적으로 궁금한 사항이나 잘못 작성된 부분이 있으면 댓글 남겨 주시길 바랍니다!

728x90
Comments