문자열 포맷팅 고급 용법에 대한 질문
조회수 243회
'''
3
x 12
--------
36
'''
이 식을 코드로 표현하기 위해 다양히 시도해보고 있습니다. 제가 시도 해본 것들은 아래 네개 입니다
#try1
a=3
b=12
print('%8d' %a)
print('%-6s%-1d'%('x',b))
print('--------')
print('%8d'%(a*b))
#try2
a=3
b=12
print('%8d' %a)
print('%-5s %-1d'%('x',b))
print('--------')
print('%8d'%(a*b))
#try3
a=3
b=12
print('%8d' %a)
print('%s %6d'%('x',b))
print('--------')
print('%8d'%(a*b))
#try4
a=3
b=12
print('%8d' %a)
print('%s%7d'%('x',b))
print('--------')
print('%8d'%(a*b))
마이너스 부호를 넣어서 포맷팅하면 숫자(%-6d
에서 -6
) 들의 절댓값이 7인 반면에
-를 넣지 않고 포맷팅하면 숫자들의 절댓값이 8입니다.
- 마이너스 부호 투입의 여부와 상관없이 두개의 절댓값, 즉 칸 수는 같아야 하는 것 아닌가요?
왜 두개가 다른지 모르겠습니다 알려주시면 감사하겠습니다!
1 답변
-
% 뒤의 숫자는 문자의 최소 개수를 의미합니다.
%6d
,%-6d
모두 마이너스 부호를 포함하여 6자리를 넘지 않는 숫자를 넣었을때의 글자수는 같습니다.다만, Try1, Try2는 최소 문자의 개수가 6, 7개로 테스트 시 해당 크기보다 큰 숫자가 들어오지 않았던것 같습니다. 그러나 Try1, Try2에서
b
값의 크기에 따라 1자리를 넘게 되면 최소 개수를 넘겨서 문자열이 형성되게 되고, 이때문에 문자열 길이가 변경된것으로 보입니다.이로인해 아래의 예제들 에서는 문제가 발생하지 않습니다.
def print_format(data): x = '%3d'%(data) y = '%-3d'%(data) print(x) print(y) print(len(x)) print(len(y)) print_format(10) print_format(-10) print_format(100)
하지만 다음 예제들 에서는 length가 4로 출력됩니다.
def print_format(data): x = '%3d'%(data) y = '%-3d'%(data) print(x) print(y) print(len(x)) print(len(y)) print_format(-100) print_format(1000)
댓글 입력