문자열 포맷팅 고급 용법에 대한 질문

조회수 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 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    % 뒤의 숫자는 문자의 최소 개수를 의미합니다. %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)
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)