Нахождение максимального значения в Python - PullRequest
0 голосов
/ 08 октября 2011

У меня проблема с тем, что мне нужно использовать данные из файла 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

Ответы [ 3 ]

4 голосов
/ 08 октября 2011

Используйте функцию max(). Это делает эту операцию правильно.

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

Ваша проблема в том, что вы устанавливаете MaxGross на ноль в каждой итерации. Таким образом, все значения, кроме последнего, игнорируются.

Также обратите внимание на создание класса Film и использование одного набора объектов фильма, а не нескольких параллельных элементов.

1 голос
/ 08 октября 2011

Возьмите MaxGross из for-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.Это, вероятно, не намерение.

Другая проблема может возникнуть, если c и year[film] являются числами с плавающей точкой.Не сравнивайте числа с плавающей точкой на равенство (если вы не знаете, что делаете), так как числа могут иметь неточные представления.Вместо этого определите некоторое понятие близости:

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

и сравните if near(year[film],c).

0 голосов
/ 21 июня 2017

Вы можете использовать max () напрямую,

    for film in year:
        if year[film]==c:
            print(max(int(gross[film]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...