Python - 1일차 (print, format)

아아, 첫 글을 뭔가 되게 딱딱하게 쓴 것 같은데.. 사실 그런 말투는 잘 사용하지도 않고, 쓰지도 못하겠어요! 원래 쓰는 말투대로, 써볼게요 :)

학습 계기

저는 옛날부터 if, for문등을 다루는 프로그래밍 언어의 시작을 JS로 해서인지 Python이나 C같은 언어를 제대로 배우고 싶다는 마음이 마음속에 있었습니다. 그러다 마침 인프런 가입 혜택으로 파이썬 강좌를 무료로 들을 수 있다는 사실을 알게 되고 나서 학습을 시작하게 되었습니다!

이렇게 써도 될지는 모르겠지만, 앞으로 제가 배운걸 정리하는 블로그가 될 것 같습니다. 무언가 실수가 있더라도 어린 학생이 배워나가는 과정이라고 봐주시고 실수를 알려주시면 감사하겠습니다!

아아, 참고로 저는, 이런 언어들은 (?) JS밖에 해보지 않았습니다! 파이썬은 처음이에요.
그리고 중요한 거, 이 글 재미 없어요. 파이썬 공부를 정리하고자 하는 마음에서 작성해봅니다.
수업시간에 배운 내용을 본문에 적고, 뒤쪽에 더 알아본 내용들을 적습니다.

내용 추가합니다! 인프런 공지사항을 보던 와중, 공부 기록을 게시할거면 강의 출처와 링크를 남겨달라고 해서요.
강의 링크 : https://inf.run/xEzE
강의 출처 :
프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original) 
섹션 2. 파이썬 완전 기초
파이썬 Print 사용법 (1-1 ~ 1-3)

1-1. Print

Print? Print는 그냥 문자열이나 숫자를 출력해주는게 아닌가? 라고 생각하며, Print에 대해 40분정도 영상이 올라와있는것을 보고 의아했습니다. 하지만 강의를 보고 나니, '기본 문법' 이라는 이름 아래에서 자세히 설명해주시더라고요.

기본 출력)

print('문자열')
print('치킨','먹고','싶다')
output :
문자열
치킨 먹고 싶다

sep 옵션)

# string과 string 사이에 들어갈 문자를 정해준다! 기본값 : 공백 (sep 옵션 사용하지 않을 시)
print('치킨','먹고','싶다', sep=' ')
print('010','1234','5678', sep='-')
output : 
치킨 먹고 싶다
010-1234-5678
# 이 옵션을 배우고 생각한 것이 있습니다. 바로, 문법을 제대로 배워야겠다는 생각이였습니다. 옵션을 그냥 문자열들을 쓰고 콤마로 구분하여서 사용한다는 문법. 처음 보는 문법이었기에 더 어떤 언어를 배우든 문법을 제대로 열심히 배워야겠다는 생각이 들었습니다.

end 옵션)

# string의 뒤에 출력될 값을 정해줍니다! 기본값 : 줄바꿈 (end 옵션 사용하지 않을 시)
print('welcome to', end=' ')
print('my blog')
output : 
welcome to my blog
# 이 옵션을 이용해서, for 반복문으로 print를 여러번 할 필요가 있을 때 print문 여러개를 이어주면 (줄바꿈을 하지 않고 이으면) 좋겠다는 생각이 들었습니다!

file 옵션)

# 경로에 적힌 파일에, string을 적어줍니다!
print('string', file='경로')
# 경로를 서버 내 db? 파일? 로 하고, sep 옵션과 함께 사용하여 데이터를 분류하는.. 것도 가능할 것 같다는 생각이 듭니다! 아직 db쪽은 더 배워봐야 해서 가능할지는 모르겠지만, 괜히 두근두근대네요.

1-2. format

# s : 문자열, d : 정수, f : 실수
사실, print에 대한 강의가 긴건 이 format 함수 때문이였던 것 같습니다.. 중요하기도 하고, 활용할 부분도 많아보였어요.

%s)

[첫번째 방법] { % 문자열 포매팅 }
print('%s %s' % ('one', 'two'))
%s가 문자열을 대체해주고, %로 둘을 연결하여 뒤에서 string의 값을 넣어준다.
output :
one two

[두번째 방법] {format 함수 (이 부분은 검색으로 더 알아보았는데요, 마지막 부분에 정리해볼게요.) }
print('{} {}'.format('one', 'two'))
output :
one two
print('{1} {0}'.format('one','two'))
output :
two one # 중괄호 안에 index 숫자를 넣어주니, output이 바뀌었네요!

여기에 뭔가 많이 적고는 싶지만, 아래쪽에 더 알아본 내용에 많이 적어볼게요! % 문자열과, format 함수로 포매팅 하는 방식의 차이 말이에요. 일단 저는 format 함수를 가져와서 사용하는 방식이 마음에 들었고, 아래에서 설명하겠지만 % 문자열 포매팅에는 한계가 있다는 점을 추가 공부로 알아냈어요. 그러니 format 함수를 사용하는 식으로만 쭉 써볼게요!

print('{:>n}'.format('string'))

이러한 형태가 있는데, string이 n만큼 공간을 차지하게 되고 >n 형식이라면 왼쪽에 공백을, <n 형식이라면 오른쪽에  공백을, ^n 형식이라면 가운데 정렬을 한다고 합니다!
print('{:>10}'.format('string')) # 그럼 이 코드의 결과는?
output :
    string  # 총 10칸 차지, 왼쪽 공백 4칸 (string이 6칸을 차지하기에)
그리고 >, <, ^의 앞에 문자열을 붙이면 공백 자리에 그 문자열이 대신 들어간다네요. 어떻게 들어가냐고요?
print('{:_<10}'.format('nice'))
output :
______nice  # 공백 대신에, <의 앞에 쓴 문자열이 대신 공간을 차지했습니다.

%d)

print('{} {}'.format(1,2))
output : 
1 2
print('{:>4d}'.format(42)) # 기본 형태는 %s와 비슷하기에 생략할게요.
output : 
  42 # 총 4칸 차지, 왼쪽 공백 2칸 (숫자가 2칸을 차지하기에)

Print문의 절삭)

str 뒤에 .이라는 기호를 통하여, 문자열을 잘라낼 수 있어요!
채워진 공간만큼에서 .을 만나면 문자열이 잘라내진다.. 라고 이해중이에요.
print('%.5s' % ('pythonstudy'))
print('{:10,5}'.format('pythonstudy'))
output :
pytho # 총 5칸 차지
pytho      # 총 10칸을 차지하고, .이라는 기호를 통해 문자열의 길이가 5로 잘라내졌어요! 

%f)

드디어 마지막이에요! 이거 쓰는게 힘들기도 하지만, 쓰면서 정리하니까 재밌기도 하고 새로운 느낌이 들기도 하네요. %f는 실수였죠? 실수면, 소수점이 있는 수도 튀어나올 수 있겠죠..?
print('{:f}'.format(1111113.141592653589793))
output : 
1111113.141592 # 강의에서는 3.141592 - 였지만, 정수부가 어디까지 출력되는지 궁금해서 늘려보았어요. 얻은 결론은, :f의 형식으로 쓰면 정수부는 모두, 소수부는 6자리까지만 출력해준다!
print('{:06.2f}'.format(3.141592653589793)) 
output : 
003.14 # .으로 구분하여 앞쪽의 수는 output으로 나올 전체 수의 길이, 뒤쪽의 수는 소수부의 길이라고 이해하면 될 것 같아요! 소수부 2자리 + . 하면 3의 길이를 차지하니까, 나머지 3의 공간을 모두 채우기 위해서 정수부에 0이라는 수가 2개 생긴거에요!

 

보충 공부

와, h1 제목 왜이렇게 크죠.. 제가 넣고도 제가 놀랐어요. 글이 엄청나게 긴데 여기까지 봐주시는 분이 있을까요? 있으면.. 어.. 이거 왜 보고계시지..?

% 포매팅 vs format 함수 

강의에서는 % 포매팅과 format 함수를 이용하는 방법 두가지 모두를 설명하며 진행했는데, 이 두가지를 왜 구분하지? 무슨 차이가 있는거지? 라는 생각이 들어서 추가로 검색을 해보았습니다.

먼저, 위에서 말했던 % 포매팅 방식의 한계란 포매팅 해야 할 변수 값이 두개 이상이라면, 일일이 각각 타입을 정해주어야 한다는 단점이었습니다. 하지만 속도가 format 함수보다 빠르다는 장점도 존재했죠.

하지만 저는 코드의 가독성을 위해서, 포맷 스트링을 잘 익히지 못했기 때문에서라도 format 함수를 사용하기로 했습니다!

그리고 또 f-string이라는 방식도 사용한다는데 이는 나중에 기회가 되면 알아보겠습니다!

format 함수의 인자값 대입

강의에서는 직접 대입하는 방식만 설명했었는데, 변수의 값을 미리 정해놓고 변수를 대입해도 되지 않을까? 변수를 만들면서 대입해도 되지 않을까? 하는 생각이 들었습니다. 그래서 직접 실험해 보았습니다!

grade = 2
test = 'grade : {0}'.format(grade)
print(test)
test2 = 'seller : {name}, price : {price}'.format(name='그랩', price=50000)
print(test2)
output : 
grade : 2
seller : 그랩, price : 50000
강의에서 나오지 않은 방법대로 시도해 보았는데, 바로 가능하더라고요? 되게 신기했어요. 이게 프로그래밍 독학이라는것인가...

마치며

와, 이걸 드디어 마칠 수 있어요. 공부는 1시간 한 것 같은데 정리하면서 더 배운거 같아요. 앞으로도 이렇게, 배운 내용이 있으면 정리해보도록 노력해보겠습니다. 이상한 부분이나, 제가 이해를 이상하게 한 것 같은데? 하는 부분이 있다면 의견 남겨주세요. 여기까지 봐주셔서 감사합니다 :)

댓글을 작성해보세요.

채널톡 아이콘