这是我的for
循环:
for x in range(0, 100):
currentRate10 = srall10[x].current_rate
startRate10 = srall10[x].start_rate
lessons10 = srall10[x].sr_completed
if currentRate10 is not None and startRate10 is not None:
gain10 = currentRate10 - startRate10
else:
gain10 = 0
rateavg = gain10 / lessons10
rateavg
返回1.42
。对我来说似乎很准确。但是,当我将变量放在100
或100
以上的任何位置时,我会返回0
。因此,如果我将100
更改为101
,则rateavg
会返回0
。如果我输入包含143
的变量,我仍会得到0
。
srall10
包含一个列表
srall10 = DBSession.query(Summary).filter(Summary.sid == 6933).filter(
Summary.sr_completed.between(1, 10)).all()
有143
个条目,这是完全相同的查询,但最后只有count()
而不是all()
有什么想法吗?
答案 0 :(得分:2)
作为最后一项的结果,您获得rateavg
。并且range(0, 100)
不会迭代所有元素。而是直接遍历列表。
l = []
for s in srall10:
if s.current_rate is not None and s.start_rate is not None:
gain10 = s.current_rate - s.start_rate
else:
gain10 = 0
l.append(gain10 / lessons10) # average if each item
# total average
total_average = sum(l) / len(l)
答案 1 :(得分:0)
Python将始终为两个整数的除法返回一个整数值,因此当Python中的除法运算返回0并且您期望一个数字时,首先要检查的是被除数和除数是否为整数。如果是这样,并且如果被除数小于除数,那么你将得到0而不是0到1之间的浮点数。
您可以通过以下方式避免这种情况:
rateavg = (gain10 * 1.0) / lessons10
我不知道这是否是您的问题,因为问题中的信息不足以确定列表中值的类型,但它通常 my < / em>当除法意外返回0时出现问题。