시리즈 이전글입니다.
2021/01/21 - [파이썬/주식 자동매매] - Python 키움API 주식자동매매프로그램 개발 - 6.Python 기초편 자료형(1)
Python에서 제공하는 자료형 중 문자열에 대해서 더 알아보도록 하겠습니다.
우선 문자열을 어떻게 만들까요?
문자, 숫자를 ‘(작은 따옴표) 혹은 “(큰 따옴표)를 묶으면 문자열이 됩니다.
예를 들어 보겠습니다.
var1 = 1
var2 = '1'
var3 = 10
var4 = "10.0"
다음처럼 var1과 var2의 차이는 작은 따옴표가 있고 없고의 차이지만
그걸로 인해서 var1은 숫자형, var2는 문자열이 됩니다.
var3, var4도 마찬가지입니다. var4는 큰 따옴표를 사용해 문자열이지만 var3는 숫자 10입니다.
이렇게 따옴표를 이용해 문자열을 만들 때 주의해야할 점은 따옴표를 얼었다면 닫아야 한다는 것입니다.
var2 = '1
이렇게 따옴표를 사용해 문자열의 시작을 했지만 끝을 지정하지 않으면 컴퓨터는 어디까지가 문자열인지 모르기 때문에 에러를 발생시킵니다.
또 열었을 때 사용한 따옴표를 그대로 사용해야 합니다.
무슨 말이냐면 처음에 작은 따옴표를 썼으면 큰 따옴표를 이용해서 문자열을 끝내면 안됩니다.
(큰 따옴표를 썼다면 작은 따옴표로 끝내면 안됩니다.)
var2 = '1"
충분히 이런 실수를 할 수 있지만 크게 걱정하실 필요는 없습니다.
문법이 잘못된 경우에는 Pycharm에서 문제의 부분을 빨간색 밑줄로 표시해줍니다.
그렇다면 작은 따옴표와 큰 따옴표를 같이 사용할 수는 없는걸까요?
그렇지는 않습니다. 시작과 끝을 동일 타입의 따옴표로 맞췄다면 그 안에서 다른 따옴표를 사용할 수 있습니다.
var2 = "I don't"
또한 여러줄의 문자열을 만들고 싶다면 따옴표를 세 번 반복하여 문자열을 선언하면 됩니다.
txt1 = """10.0
1
100
그리고 안녕하세요
화이팅하시죠
"""
txt2 = '''
작은 따옴표도 가능!
'''
다음은 문자열끼리의 (+) 연산입니다.
연산이라고 하면 숫자들끼리만 가능한 것 아닌가? 하실 수 있지만 문자열에서의 (+)연산은 문자를 합치는 것을 의미합니다.
위의 예시 코드에서 숫자 1이 아니라 문자 ‘1’로 바꿔서 (+)연산을 해보겠습니다.
var3 = "안녕"+'1'
# var3 = "안녕" + 1
결과는 ‘안녕1’입니다.
이렇게 문자형끼리 (+)를 사용하면 두 문자가 합쳐지는 것을 알 수 있습니다.
조금 더 응용해보겠습니다.
var3 = "안녕"+ '1' + "안녕 "+'1'
(+)연산을 이용해 여러개의 문자들을 합칠 수도 있습니다. 여기서 눈여겨 보실 것은 “안녕 “입니다.
이 문자를 자세히 보면 마지막 따옴표가 끝나기 전에 공백이 들어가 있기 때문에
공백이 없는 “안녕”과는 엄연히 다른 문자입니다.
이제 마지막으로 문자열에 대해 두 가지만 더 살펴볼 것은
슬라이싱(Slicing)과 포맷팅(Formatting)입니다
먼저 슬라이싱은 말 그대로 자른다는 의미입니다.
var = "1234567890"
여기서 var라는 문자를 슬라이싱 해보겠습니다. 슬라이싱할 때 사용하는 문법은 아래와 같습니다.
문자열[시작하는 곳 : 끝나는 곳]
var를 2번째 문자부터 9번째 문자까지 슬라이싱 해보겠습니다.
var[1:9]
# 출력 결과 > 23456789
자세히 보면 뭔가 이상하다는 생각이 듭니다.
2번째부터 자른다고 하면 다음과 같이 하는게 아닐까요?
var[2:9]
그렇게 생각하실 수도 있지만 또 결과를 살펴보면 출력결과는 2부터 잘 나오는 것으로 보아 정상적으로 실행됐음을 알 수 있습니다.
그럼 var[1:9]이 코드가 두번째 문자부터 정상적으로 슬라이싱할 수 있었던 이유는
Python은 인덱싱(번호매기기)가 0부터 시작하기 때문입니다.
무슨 말이냐면 다음 문자를 보면 1이 첫번째고 2가 두번째라고 생각하시기 쉽지만
var = "1234567890"
Python은 1을 0번째 문자, 2를 첫번째 문자로 인식합니다.
따라서 우리 눈에 2번째 문자인 2는 컴퓨터 기준으로는 첫번째이므로 2부터 자르고자 한다면 컴퓨터가 알아들을 수 있도록 ‘첫번째부터’라고 알려줘야 합니다.
이렇게 컴퓨터와 우리가 생각하는 순서가 차이가 있다고 생각하시길 바랍니다.
우리 눈에는 순서를 첫번째부터 시작하지만 컴퓨터는 순서가 0번째부터 시작
그럼 계속해서 살펴보면 슬라이싱에는 시작 번호와 끝 번호가 반드시 필요한 것은 아닙니다.
예를 들어 끝 번호를 전달하지 않으면 마지막까지를 의미합니다.
var[1:]
# 출력 결과 > 234567890
그러면 슬라이싱의 시작번호도 전달하지 않으면 어떻게 될까요?
var[:]
# 1234567890
그냥 var 전체를 출력한 것과 var[:] 의 결과가 동일합니다. 슬라이싱은 하려고 했지만 시작과 끝을 전달하지 않았다면 아무 것도 하지 않은 원래 var와 동일하다는 것을 알 수 있습니다.
슬라이싱에 대해서도 더 살펴볼 부분들이 있지만 본 도서에서는 이정도면 충분하니
다음으로 포맷팅(Formatting)에 대해서 알아보겠습니다.
포맷팅이란 간단히 말해 문자를 출력하는 포맷을 만들어 놓고 변형하기 쉽도록 하는
것입니다.
그러면 왜 이런 포맷이 필요할까요?
예를 들어 현재 수익률을 출력하는 메시지가 필요하다고 가정해보겠습니다.
message = "수익률 : 10%"
하지만 여기서 10에 해당하는 부분은 수익률이 움직임에 따라 계속 변할 수 있는 반면 “수익률 : %” 이라는 문자는 굳이 계속 변경할 필요는 없을 것입니다. 이렇게 고정된 다른 문자 속에 가변문자를 넣기 위해서는 다음과 같이 사용합니다.
문자열.format(가변문자)
그리고 가변문자가 들어갈 자리를 {}로 표시합니다.
이를 적용하면 다음과 같이 됩니다.
message = "수익률 : {}%".format("10")
# 수익률 : 10%
여기서 가변문자가 두개라면 각각의 문자가 들어가야할 자리에 {}을 추가하고 format에 두 개를 전달합니다. (전달하는 “10”과 “5” 사이에는 콤마(,)를 사용합니다.)
message = "수익률 : {}%, 직전 수익률: {}%".format("10", "5")
# 수익률 : 10%, 직전 수익률: 5%
위의 코드는 format()에 “10”, “5”를 직접 입력했지만 다음처럼 변수를 사용할 수도 있습니다.
return_rate_ago = "5"
return_rate = "10"
message = "수익률 : {}%, 직전 수익률: {}%".format(return_rate, return_rate_ago)
여기서 format이라는 함수는 문자열에서만 사용할 수 있으며 이 문자열 안에 ‘{}’을 넣고 그 자리를 다른 문자로 바꿔 끼울 수 있게 해준다고 생각하시기 바랍니다.
반대로 {}을 제대로 넣지 않거나 사용한 {}의 개수와 format에 전달하는 문자의 개수가 맞지 않으면 에러가 발생합니다. 아래는 무자열 가변자리 2개를 만들기 위해 {}를 두 번 사용했지만 format에 전달하는 변수는 한개라 에러가 발생합니다.
message = "수익률 : {}%, 직전 수익률: {}%".format(return_rate)
# error!
같이 보시면 좋을 글
2021/02/10 - [파이썬/주식 자동매매] - 주식매매프로그램 개발 노하우, 소스를 담은 전자책이 발간되었습니다.
2021/01/22 - [파이썬/주식 자동매매] - Python 키움API 자동매매프로그램 개발-8.Python 기초편 튜플, 리스트 사용 패킹 언패킹
'파이썬 > 주식 자동매매' 카테고리의 다른 글
Python 키움API 자동매매프로그램 개발-9.Python 기초편 딕셔너리 사용 (2) | 2021.01.24 |
---|---|
Python 키움API 자동매매프로그램 개발-8.Python 기초편 튜플, 리스트 사용 패킹 언패킹 (1) | 2021.01.22 |
Python 키움API 자동매매프로그램 개발-6.Python 기초편 자료형(1) (0) | 2021.01.21 |
Python 키움API 자동매매프로그램 개발-5.Python 기초편 주석, 들여쓰기 (0) | 2021.01.21 |
Python 키움API 자동매매프로그램 개발-4.Python 기초편 변수 사용하기 (2) | 2021.01.20 |
댓글