Python 문자열 포맷 (폭과 정밀도) 문제 풀이(Claude)

2026. 7. 11. 10:50파이썬

📌 문제

다음 Python으로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.

a = "What's this?"
print("%-10.4s" % a)
print("%10.4s" % a)

단계별 실행

1행 — a

a = "What's this?"

2행 — print("%-10.4s" % a)

%10.4s 형식은 세 부분으로 나뉩니다.

기호 의미

- 왼쪽 정렬 (없으면 기본값은 오른쪽 정렬)
10 전체 출력 폭(width)
.4 정밀도(precision) — 문자열을 몇 글자까지 자를지
s 문자열 포맷

정밀도 적용:

a[:4] = "What"

문자열을 앞에서부터 4글자까지만 자릅니다.

폭 적용: "What"(4글자)을 10칸 폭에 맞춰야 하므로, 남는 6칸을 공백으로 채웁니다. -가 있으므로 왼쪽 정렬 → 공백이 오른쪽에 붙습니다.

"What      "   (What + 공백 6개 = 총 10칸)

3행 — print("%10.4s" % a)

이번엔 -가 없으므로 기본값인 오른쪽 정렬이 적용됩니다. 자르는 것까지는 동일하게 "What".

"      What"   (공백 6개 + What = 총 10칸)

✅ 최종 실행 결과

What      
      What
  • 1번째 줄: What 뒤에 공백 6칸 (왼쪽 정렬)
  • 2번째 줄: 공백 6칸 뒤에 What (오른쪽 정렬)

⚠️ 함정 포인트

  1. .4는 자릿수 제한(정밀도) — 문자열이 그보다 길면 앞에서부터 4글자만 남기고 자릅니다. "What's this?"의 나머지 부분('s this?)은 출력되지 않습니다.
  2. 10은 전체 폭 — 자른 결과("What", 4글자)보다 넓으므로 남는 칸은 공백으로 채워집니다.
  3. -가 있으면 왼쪽 정렬, 없으면 오른쪽 정렬이 기본입니다.
  4. 공백도 눈에 보이지 않지만 정답의 일부 — 채점 시 공백 개수까지 정확히 맞춰야 합니다.

🎯 핵심 개념 정리

%[플래그][폭].[정밀도]s 포맷 문법

문자열 포맷 = %[-][width].[precision]s

요소 역할 예시

- (플래그) 왼쪽 정렬 (생략 시 오른쪽 정렬) %-10s
width (폭) 전체 출력 칸 수, 부족하면 공백으로 채움 %10s
.precision (정밀도) 문자열을 해당 글자 수까지만 자름 %.4s

예시로 감 잡기

a = "Hello World"

print("%10s" % a)     # "Hello World" (10보다 길어서 그대로 출력)
print("%.5s" % a)      # "Hello" (5글자로 자름)
print("%10.5s" % a)    # "     Hello" (5글자로 자르고 10칸 오른쪽 정렬)
print("%-10.5s" % a)   # "Hello     " (5글자로 자르고 10칸 왼쪽 정렬)

✍️ 시험 답안용 한 줄 풀이

%.4s는 문자열을 4글자로 잘라 "What"을 만들고, %10은 전체 폭을 10칸으로 맞춘다. -가 있으면 왼쪽 정렬("What "), 없으면 오른쪽 정렬(" What")이 되므로 두 줄의 출력은 각각 What 뒤에 공백 6칸, 공백 6칸 뒤에 What이다.


🧠 미니 퀴즈

  1. "%-10.4s" % a를 "%-6.4s" % a로 바꾸면 결과는 어떻게 될까요?
  2. .4를 .2로 바꾸면 잘린 문자열은 무엇일까요?
  3. a = "Hi"로 바꾸고 "%10.4s" % a를 실행하면 결과는?

정답

  1. "What " — 폭이 6칸이므로 4글자(What) + 공백 2칸만 채워집니다.
  2. "Wh" — 앞에서부터 2글자만 남습니다.
  3. " Hi" — "Hi"는 이미 4글자보다 짧아서 정밀도 제한에 걸리지 않고, 2글자를 10칸에 오른쪽 정렬하면 공백 8칸 + Hi가 됩니다.