我正在解决一个问题,我需要使用csv文件中的数据来查找每年影片总数较高的影片。
我已经为每部电影和它出现的那一年制作了'dict'年份,并且对于'粗略'也是如此。 尽管如此,我的代码仍然返回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
答案 0 :(得分:4)
使用max()
功能。它正确地执行此操作。
max(int(gross[film]) for film in year if year[film] == c)
您的问题是您在每次迭代中将MaxGross
设置为零。所以所有的值都会被忽略。
请同时考虑创建一个电影课并使用一个电影对象的字典,而不是多个平行的字符串。
答案 1 :(得分:1)
从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
在for循环中使用MaxGross = 0
,所有先前的迭代都没有任何意义。只有最后一个会影响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)
。
答案 2 :(得分:0)
您可以直接使用max(),
for film in year:
if year[film]==c:
print(max(int(gross[film]))