2013-07-08 2 views
0

저는 파이썬에 익숙하지 않고 함수 customer_state에 어려움을 겪고 있습니다. CSV 파일에서 데이터를 가져 오는 다른 함수가 있습니다. 나는) 그 파일에서 열의 합계를 얻고 또한 일 (시간 t 동안 나에게 성장 속도를 제공하는 (sm1을 얻고 싶은 이것은 내가 지금까지 한 일이다.상수를 범위 (366)로 나누는 방법은 무엇입니까?

def del_pass(): 
    reader = csv.DictReader(open("data.csv", "rb")) 
    all_rows = list() 
    for row in reader: 
     all_rows.append(row) 
    return all rows  

def get_one_column(name): 
    column_list= list() 
    rows = del_pass() 
    for row in rows: 
     value = row(name) 
     if value =='': 
      value = 0 
     else: 
      value = int(value) 
    column_list.append(value) 
    return column_list 

def customer_state(x): 
    sm = sum(x) 
    t = range(366) 
    sm1 = sm + (0.07 * (t/365) * sm) 
    return sm, sm1 

def example_use1(): 
    column_name ="totcust" 
    column = get_one_column(column_name) 
    column_stats = customer_state(column) 
    print column_stats 

모든 기능이 보인다 내게 같은 오류를 범 customer_state(x) 제외하고 잘 작동한다.

sm1 = (sm + ((0.07/t) * sm)) 
TypeError: unsupported operand type(s) for /: 'float' and 'list' 
+2

'0.07/range (366)'의 결과는 무엇을 기대합니까? 나는 당신이 거기에서 기대했던 결과를 상상할 수 없다. –

+0

작은 예를 들어 주시겠습니까? –

+0

메시지에 따르면 범위 (366)는 숫자가 아니고 목록입니다. 인쇄본 (범위 (366))을 사용하여 그 내용을 확인하십시오. – gcandal

답변

0

I가 0.07/범위 (366)를 가정하고있어 범위에 대응하는 요소 (366)에 의해 분할 된 0.07의 목록을 반환해야?

이 경우 요 당신이 질문에 대한 NumPy와 태그를 적용 이후 NumPy와 배열로 t을 초기화,

sm1 = [sm + ((0.07/t) * sm)) for t in xrange(1,366)] 

나 :

t = numpy.mgrid[1:366] 
sm1 = sm + (0.07/t) * sm 

다음 요소 현명한 부서가 사용됩니다 u는 지능형리스트를 사용할 수 있습니다 게다가.

두 경우 모두 : 색인 생성 및 따라서 범위 목록이 0부터 시작하므로이 목록의 첫 번째 요소는 Inf가됩니다.

+0

예. 감사합니다 –

+0

죄송합니다, 수식을 약간 변경했습니다. sm1 = sm + (0.07 * (t/365) * sm) 위의 방법을 사용하면 작동하지 않습니다. –

+0

제 솔루션을 편집했습니다. 제로 분할이 없어야합니다. 더 이상 목록 이해력에 오류가 있습니다. – sebastian

관련 문제