파이썬 for in range 구문 좀 더 직관적이게 바꿀 수 있을까요?
OIL.csv
Date,Open,High,Low,Last,Change,Settle,Volume,Open Interest
2016-12-07,51.98,52.28,50.89,50.95,1.03,50.94,315168.0,249919.0
2016-12-06,52.0,52.68,51.38,51.98,0.86,51.97,194699.0,235675.0
2016-12-05,52.57,53.38,51.99,51.99,0.18,52.83,189198.0,220441.0
2016-12-02,52.25,52.69,51.12,52.64,0.69,52.65,179124.0,215723.0
2016-12-01,50.0,52.67,49.94,51.82,1.62,51.96,312215.0,193537.0
...
위의 csv파일을 읽은 후 특정 날짜에서 이전 며칠 전(input_length)까지의 Last 값을 모두 더하는 함수입니다.
ex) 2016-12-07, 2 입력시 처음과 두 번째 행(2016-12-07, 2016-12-06)의 Last 열에서 가져 온 50.95 + 51.98 값을 출력
import pandas as pd input_date = input() input_length = input() OIL = pd.read_csv("OIL.csv", index_col=['Date'], usecols=[0,1,2,3,4]) start = OIL.index.get_loc(input_date) end = start + input_length -1 def period_last_sum(input_date, input_length): global start, end func_result = 0 for _ in range(start, end+1): func_result = func_result + OIL.iat[start,3] start +=1 print(func_result) return func_result result = period_last_sum(input_date, input_length) print(result)
인덱스 행이 0부터 시작하기 때문에 부득이하게 input_length 값에서 1을 빼야 했고,
for in range 구문에서는 원래 end 값이 있어야 하기 때문에 1을 더해야 했습니다.
실행하는 데는 문제가 없지만, 왜지 가독성도 떨어지고 다음에 봤을 때는 내가 왜 이랬는지 주석을 달아도 이해하기 어려울 것 같습니다 -_-;;
어떻게 해야 코드를 직관적으로 바꿀 수 있을까요?
문법에 대해서도 질문 한 가지 드리고 싶습니다.
만약 다른 함수도 추가한다면, 위의 함수에서 global로 전역 변수 start, end를 호출하는 게 잘못된 선택인 것 같습니다. 그런데 저렇게 호출하지 않으면 for _ in range(start, end+1) 구문에서 start와 end를 사용할 수가 없게 되는데, 혹시 두 전역변수의 내용을 바꾸지 않으면서 다른 추가 함수에서도 사용할 수 있는 방법이 있을까요?
repeat함수 있을텐데요
repeat함수 있을텐데요
import pandas as pd
혹은 다음 함수도 가능합니다.
댓글 달기