2011-10-08 103 views
-2

我正在做一個問題,我需要使用csv文件中的數據來查找哪個電影每年的總數很高。在python中查找最大值

我已經有每部電影的字典「年」,它出來的一年和'毛'相同。 儘管如此,我的代碼仍然返回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

我想這可能是因爲今年[電影]永遠等於C。 – lostyzd

+0

這是一個相當尷尬的結構。 – NullUserException

+5

爲什麼不使用['max()'](http://docs.python.org/library/functions.html#max)? –

回答

1

採取MaxGrossfor-loop的:

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 = 0裏面的for循環,所有之前的迭代意味着什麼。只有最後一個會影響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)

4

使用max()函數。它正確執行了此操作。

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

您的問題是您在每次迭代中將MaxGross設置爲零。所以除了最後的所有值都被忽略。

還請看看創建一個Film類並使用一個電影對象的字典,而不是多個平行的字典。

0

您可以使用MAX()直接,

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