다양한 출력 방법
1주차에서 우리는 가장 대중적인 출력 방법인 print를 배웠습니다.
이번에는 print에 안에 입력하여 사용하는 end, format, join에 대해 알아봅시다.
입출력
end
print함수에는 end라는 인자에 값을 넣을 수 있습니다. 이 기능은 출력하는 문자 끝에 어떤 것을 더 출력할지 정해주는 인자입니다.
우리가 print함수를 쓰면 자동으로 마지막에 줄 바꿈이 적용되는데요. 이 print에 있는 end인자의 기본값이 줄 바꿈('\n')입니다.
위와 같이 end = ', '를 추가해서 1, 2, 3, 4, 5, 를 출력할 수도 있습니다.
깔끔하게 마지막에 5 오른쪽에 , 를 없애려면 아래 코드처럼 if / else문을 사용할 수 있습니다.
나중에 다른 문제들을 풀 때, end 인자에 값을 넣어야 하는 경우 사용해보시면 됩니다.
풀어볼 문제
format
이 문제를 봅시다. A+B를 출력하는 방법은 쉬울 것이고, 출력하는 것이 문제인데 지금까지 배운 print와 콤마(,)와 문자열끼리 붙여주는 + 연산자를 이용해서 코드를 만들어 보았습니다.
이렇게 하면 문제를 풀 수 있지만 print부분의 코드가 많이 더러운 편입니다. 그래서 코드를 좀 더 깔끔하게 적을 방법인 format을 소개하겠습니다.
format은 print('내용'.format())으로 작성할 수 있으며 변수를 출력할 내용 부분에는 {}를 입력해주며, 소괄호 안에 거기에 들어갈 수를 적어주면 됩니다. 위 문제를 예시로 들자면 아래 코드처럼 바꿀 수 있습니다.
따옴표 부분에는 필요한 내용만 적고, 변수들은 전부 괄호 안에 넣으면 되므로 확실히 가독성이 좋아지게 됩니다.
그리고 format에서 {}에는 인덱싱을 지원해줍니다.
이렇게 a+b와 i+1을 서로 순서를 바꿔서 입력을 해도 {1}, {0}처럼 이렇게 중괄호 안에 숫자를 넣으면 정상적으로 나오게 만들 수 있습니다. 하지만 일부러 저렇게 문제를 풀지는 않겠지요.
format을 사용하는 문제는 보통 위에 A + B - 7 문제와 같이 출력 내용에 고정된 문자열 내용이 있을 때 사용하는 편입니다.
풀어볼 문제
참고로 format에는 소수점을 필요한 부분까지만 출력할 수 있는 기능도 있습니다.
일단 원의 넓이는 pi * 반지름 * 반지름이고, 택시 기하학은 무슨 소리인지 모르겠는데 예제를 보니까 원의 넓이는 2 * (반지름) * (반지름)인 것 같습니다.
출력은 소수점 아래 6자리이고, 정수 값이 나와도 무조건 소수점 아래 숫자를 0으로 채워야 하네요.
일단 소수점을 출력하는 방법은 {0:.6f}로 이 문제에서는 6자리를 출력하니까 6을 적으면 됩니다. 소수점 아래 3자리만 출력한다면 {0:.3f} 입니다.
위 코드에 나온 pi 값은 소수점 6자리를 넘어서 11자리를 나타내고 있는데요. 이는 답의 오차가 0.0001까지만 차이가 나야 정답으로 인정되기 때문에 3.141592를 사용할 경우 틀린 답이 나오게 됩니다. 아래에 관련 내용을 적어두었습니다.
풀어볼 문제
이제 문자열로 넘어가시면 됩니다.
join은 리스트(list) - 슬라이싱을 읽기 전에 읽으면 됩니다. 슬라이싱 항목에 같은 내용을 적어두었습니다.
join
join 함수는 iterable(문자열, list, tuple, set, dict 등) 요소 사이에 문자열을 출력하는 방식입니다. 문자열의 경우에는 한 글자씩 분리되어 출력을 할 수 있습니다.
위 코드는 ' '.join(D)로 따옴표 사이에 공백 한 칸을 넣었는데요. 이러면 자료구조면 각 요소 사이, 문자열이면 각 문자 사이에 공백을 한 칸씩 주어서 출력을 할 수 있게 해줍니다.
이렇게 다양하게 출력할 수 있습니다.
주의할 점은 요소들은 문자열이어야 한다는 것입니다. 요소 값에 int형이나 float형 같은 것이 있으면 오류를 출력하므로 문자열(str)로 변경해야 합니다.
우리가 여러개의 값을 input으로 입력 받을 때 map이라는 함수를 사용하는데, 여기서도 map이 사용됩니다.
이렇게 D배열에 있는 요소 값들을 str형으로 바꿀 수 있습니다.
for문을 돌려 반복한 횟수만큼 별을 만들어서 list에 저장해봅시다.
위와 같이 출력할 별들을 ans라는 리스트에 값을 저장할 수 있습니다. 출력할 때에는 엔터키인 줄 바꿈('\n')을 사용하여 출력하면 되겠습니다.
또 다른 문제를 풀어봅시다.
알파벳 소문자만 들어 있는 단어 S가 주어지는데, S에 들어간 알파벳이 각각 몇 개 들어가 있는지 출력하는 문제입니다.
일단 이 문제는 아스키 코드로 풀 수 있습니다. 하지만 아스키 코드를 2주차에 설명하기에는 너무 분량이 많은 것 같아서 잠깐 이용 방법만 알려드리려고 합니다.
아스키 코드는 컴퓨터가 0과 1로만 표현이 가능해서 문자를 읽지 못하기 때문에 각 문자를 숫자로 나타내는 방법입니다.
알파
아스키 코드
a
97
b
98
c
99
d
100
e
101
f
102
g
103
h
104
i
105
j
106
k
107
l
108
n
109
m
110
o
111
p
112
q
113
r
114
s
115
t
116
u
117
v
118
w
119
x
120
y
121
z
122
이렇게 a ~ z는 각각 97 - 122까지 매칭이 됩니다.
문자의 아스키 코드를 출력하는 함수는 ord()입니다. 반대로 아스키 코드를 문자로 변환하는 함수는 chr()입니다.
이 아스키 코드를 통해 리스트와 인덱싱을 이용하여 문제를 풀려고 합니다.
어떻게 적용하냐면 소문자 알파벳의 아스키 코드가 ord('a')-97 = 0, ord('b') - 97 = 1, ord('c') - 97 = 2, .... , ord('z') - 97 = 25 이렇게 연속적으로 이루어져 있으므로 길이가 26인 리스트를 이용하여 문제를 풀 수 있습니다. 그리고 for문을 이용해서 한 글자씩 문자를 입력 받아서 97을 빼주고 값을 처리해주면 되겠네요.
그다음엔 join을 이용하여 문자를 출력하면 됩니다. 각 요소 사이에 있는 문자는 공백이니 공백 한 칸을 넣어주면 되겠네요. 그리고 arr의 요소 값들은 int형이니까 str형으로 바꾸어주어야 합니다.
아스키 코드 문제는 4주차에 풀 예정이니 이렇게도 풀 수 있다는 것만 알아두세요! 아스키 코드는 나중에 배울 카이사르 암호(시저 암호) 문제를 풀 때도 쓰입니다.
현재 join을 이용할 문제가 공백이나 줄 바꿈을 출력할 문제밖에 찾을 수가 없네요. 줄 바꿈은 앞으로도 print로만 출력할 확률이 높은 것 같아서 공백만 출력하는 문제들만 모아보았습니다.
풀어볼 문제
Last updated