2011-10-08 5 views
-2

나는 매년 어떤 영화에 많은 총액이 있는지 찾기 위해 CSV 파일의 데이터를 사용해야하는 문제를 겪고 있습니다.파이썬에서 최대 값 찾기

나는 이미 각 영화와 함께 '연도'가 있고 그 영화가 나온 연도와 '그로스'의 경우에도 동일합니다. 그럼에도 불구하고 내 코드는 여전히 최대 총량을 0으로 반환합니다. 내가 여기서 무엇을 놓치고 있니?

def MaxGrossFinder(c): 

    for film in year: 
     MaxGross = 0       
     f = int(gross[film])       
     if year[film] == c: 
      if f > MaxGross: 
       MaxGross = f 
    return MaxGross 
+2

나는 어쩌면 생각합니다. – lostyzd

+0

이것은 다소 어색한 구조입니다. – NullUserException

+5

['max()'] (http://docs.python.org/library/functions.html#max)를 사용하지 않는 이유는 무엇입니까? –

답변

1

for-loop에서 MaxGross을 가지고 : 내부 MaxGross = 0

def MaxGrossFinder(c): 
    MaxGross = 0 
    for film in year:      
     f = int(gross[film])       
     if year[film] == c: 
      if f > MaxGross: 
       MaxGross = f 
    return MaxGross 

가에 대한 루프, 모든 이전의 반복은 아무 의미 없습니다. 마지막 항목 만 MaxGross에 영향을 미칩니다. 아마 그 의도는 아닙니다.

cyear[film]이 부동 소수점 일 경우 다른 문제가 발생할 수 있습니다. 부동 소수점은 정확하지 않은 표현을 가질 수 있기 때문에 부동 소수점을 평등하게 비교하지 마십시오 (현재 무엇을하는지 모르는 경우). 대신 는 근접성의 몇 가지 개념을 정의

def near(a,b,rtol=1e-5,atol=1e-8):   
    return abs(a-b)<(atol+rtol*abs(b)) 

if near(year[film],c)을 비교합니다. 올해 [영화] C와 동일하지 않기 때문에

4

max() 기능을 사용하십시오. 이 작업은 올바르게 수행됩니다.

max(int(gross[film]) for film in year if year[film] == c) 

각 반복마다 MaxGross을 0으로 설정하는 것이 문제입니다. 따라서 마지막 값을 제외한 모든 값은 무시됩니다.

여러 개의 평행선을 사용하는 대신 Film 클래스를 만들고 하나의 필름 개체를 사용하십시오.

0

당신은 최대()를 사용하여 직접

for film in year: 
     if year[film]==c: 
      print(max(int(gross[film])) 
관련 문제