본문 바로가기
파이썬/주식 자동매매

Python 키움API 자동매매프로그램 개발-14.Python 기초편 반복문(1) for 사용

by 행복론자 2021. 1. 26.

시리즈 이전글입니다.

2021/01/26 - [파이썬/주식 자동매매] - Python 키움API 자동매매프로그램 개발-13.Python 기초편 조건문(2)

 

 

프로그래밍을 배우며 몰라도 된다고 할 수 있는 것들은 많을 수 있어도 

꼭 알아야하는 것들 중에는 반복문이 있습니다.

코드를 만들면 반복해서 해야할 일들이 있고 그러다 보면 자연스레 코드가 길어지고 알아보기 힘들어질 수 있습니다.

예를 들어 구구단 중 2단만 출력하는 경우 다음처럼 할 수 있습니다. 

print("{} * {} = {}".format(2, 1, 2))
print("{} * {} = {}".format(2, 2, 4))
print("{} * {} = {}".format(2, 3, 6))
print("{} * {} = {}".format(2, 4, 8))
print("{} * {} = {}".format(2, 5, 10))
print("{} * {} = {}".format(2, 6, 12))
print("{} * {} = {}".format(2, 7, 14))
print("{} * {} = {}".format(2, 8, 16))
print("{} * {} = {}".format(2, 9, 18))



복사 & 붙여넣기를 이용해 코드를 만들었지만 그것조차 꽤나 번거로운 일이었습니다. 

혹시 그럼 9단까지 출력하려면 어떨까요? 생각만해도 코드가 너무 많아 가독성이 떨어질 것 입니다. 이렇게 반복해서 하는 작업을 반복문을 통해 간단히 줄일 수 있습니다.



01.for 사용

잘 아시다시피 for는 영어로 ‘~하는 동안’을 의미합니다. 

하지만 Python에서 for의 의미는 ‘~하는 동안’ 반복문을 수행하는데 쓰이며 문법은 다음과 같습니다.

for 변수 in range(반복 횟수):
  반복할 코드



조건문에서 조건에 해당하는 코드를 실행하려면 해당 영역을 들여쓰기 했던 것처럼

반복문에서도 반복할 코드들을 들여쓰기 해야 반복될 수 있습니다.

먼저 range(횟수)라는 부분을 살펴보겠습니다.

 

먼저 무엇인지 잘 모르겠으니 무작정 한번 출력해보겠습니다.

Python 버전 3이상에서 range를 출력해보면 다음처럼 range라고 나옵니다.

print(range(9))
# range(0, 9)



하지만 여기서 range(9)를 list로 감싸서 리스트로 만들어보면 결과는 다릅니다.

print(range(9))
print(list(range(9)))
# range(0, 9)
# [0, 1, 2, 3, 4, 5, 6, 7, 8]



range(9)를 리스트로 만드니  0부터 8까지의 숫자를 가지고 있습니다.

이렇게 range(반복 횟수)라는 코드는 0부터 반복 횟수보다 하나 작은 숫자까지 1씩 증가하는 숫자를 만들어냅니다. 

물론 항상 0부터 시작해야하는 것은 아니며 꼭 1씩 증가시킬 수만 있는 것은 아닙니다.

range(A)라고 하면 0부터 시작해 A보다 하나 작은 숫자까지 1씩 증가한 숫자들을 만들지만

range(A, B, C)는 A부터 시작해 B보다 하나 작은 숫자까지 C만큼씩 증가한 숫자들을 만들어 냅니다. 본 프로젝트 및 예시에서는 사용하지 않는 방법이지만 이렇게도 할 수 있다는 것을 알고 계셨으면 좋겠습니다.

range(A)

range(A, B, C)

print(list(range(1, 10, 2)))

# 1, 3, 5, 7, 9]



그럼 range가 무슨 역할을 하는지 알았다면 계속해서 ‘변수’란 무엇일까요?

for 변수 in range(반복 횟수):
  반복할 코드



예시 코드를 보며 설명드리겠습니다.

for i in range(9):
  print(i)

# 0
# 1
# 2
...
# 8

 

 

먼저 변수의 이름은 마음대로 정해도 좋습니다. 저는 i를 사용했지만 다른 이름을 사용하셔도 무방합니다. i가 무엇인지 확인하기 위해 출력한 결과를 보면 range(9)에 들어있는 숫자 0부터 8까지를 순서대로 i라는 변수에 대입시켰다는 것을 알 수 있습니다. 이 과정을 그림으로 정리해보겠습니다. 



range(9)에 들어있는 값들을 하나씩 i에 저장합니다. 

i에 저장될 때마다 for 밑에 있는 들여쓰기한 반복할 코드 블록이 실행됩니다.

range(9)에는 총 9개의 숫자가 들어있으므로 print(i)는 똑같이 9번 실행되며 

i의 값은 range(9)에 들어있는 숫자 순서대로 대입됩니다.

그럼 시작할 때 예로 들었던 구구단 중 2단을 for와 range를 사용해 만들어보겠습니다.

for i in range(1,10):
  print("{} * {} = {}".format(2, i, 2*i))



숫자 2에 1부터 9를 곱하는 반복문을 만들어야 합니다. 2는 고정으로 둔 상태에서 1부터 9까지의 곱할 숫자를 만들기 위해 range(1, 10)을 사용했습니다.

하지만 range를 range(9)로 사용하고 i에 1을 더해 똑같은 결과를 만들 수 있으니 자유롭게 구현하시면 됩니다.

for i in range(9):
  print("{} * {} = {}".format(2, i+1, 2*(i+1)))



사실 이게 for와 range를 이용한 반복문의 끝입니다. 간단하지만 익숙하지 않으셔서 조금 헤깔릴 수 있는 부분들을 정리해보겠습니다.

 

먼저 for 반복문에서 항상 range를 사용해야하는 것은 아닙니다. ‘반복할 수 있는 것’이 오면 됩니다. 이를 ‘반복가능한 객체‘라고 말할 수 있고 구분할 수 있는 방법이 있지만 

단순히 우리가 배운 range, tuple, list, dictionary들이 반복할 수 있다고 간단히 기억하시면 충분합니다.

반대로 반복가능한 데이터가 아니라면 당연히 반복문을 사용할 수 없습니다.

for i in 9:
  print(i)

# TypeError: 'int' object is not iterable



int형 데이터 9는 반복가능한 객체(iterable object)가 아니기에 반복할 수 없습니다.

리스트를 이용한 반복문을 사용하면 리스트 안에 있는 값이 그대로 변수에 전달되는 것을 알 수 있습니다.

for i in [0, 2, 4, 6, 8]:
  print(i)  # 0, 2, 4, 6, 8이 순서대로 출력 



또 딕셔너리를 이용해 반복문을 사용할  수도 있습니다.

test_dict ={
  'key1': 1,
  'key2': 4,
  'key3': 9
}

for i in test_dict:
  print(i)



그런데 딕셔너리는 Key값도 있고 Key만의 Value도 존재합니다.

이 경우 반복문의 i에 전달되는 값은 Key와 Value 중 무엇일까요?

print(i)의 결과를 보면 다음과 같습니다.

key1
key2
key3


Key값들이 나오는 것으로 봐서 딕셔너리를 이용한 반복문은 변수에 Key값들이 전달되는 것을 알 수 있으며 또 한가지 눈여겨볼 점은 딕셔너리를 만들 때는 Key를 key1, 2, 3 순서로 만들었고 출력한 결과도 동일하게 key1, 2, 3 순으로 나옵니다. 

(Python3.7에서는 딕셔너리 생성과 출력순서가 동일하지만 이전 버전들은 그렇지 않습니다.)

 

딕셔너리의 Value를 기준으로 반복하는 방법은 다음처럼 명시적으로 딕셔너리의 Value를 전달해야합니다. 

for i in test_dict.values():
  print(i)

# Key출력과 마찬가지로 Value도 순서가 임의로 출력됨

 

 


같이 보시면 좋을 글

2021/02/10 - [파이썬/주식 자동매매] - 주식매매프로그램 개발 노하우, 소스를 담은 전자책이 발간되었습니다.

 

주식매매프로그램 개발 노하우, 소스를 담은 전자책이 발간되었습니다.

주식매매프로그램 개발 노하우에 관한 제 전자책이 발간되었습니다. https://kmong.com/gig/292764 주식매매프로그램, 쉽게 따라 만드는 노하우와 소스를 드립니다. | 36000원부터 시작 가능한 총 평 0개

jsp-dev.tistory.com

 

 

2021/01/27 - [파이썬/주식 자동매매] - Python 키움API 자동매매프로그램 개발-15.Python 기초편 반복문(2) while 사용

 

반응형
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글