在Python中查找列表中的最小数字
我正在尝试在Python中使用一个for循环来计算每周和每月的平均值:
sum = 0
sumA = 0
sumB = 0
sumC = 0
sumD = 0
week1 = (35,38,30,34,27,40,39)
week2 = (35,38,30,34,27,40,39)
week3 = (35,38,30,34,27,40,39)
week4 = (35,38,30,34,27,40,39)
for x in (week1):
sum = sum + week1[x]
avg1 = (sum + week1[x]) / 7
for y in (week2):
sumA = sumA + week2[y]
avg2 = (sumA + week2[y]) / 7
for z in (week3):
sumB = sumB + week3[z]
avg3 = (sumB + week3[z]) / 7
for k in (week4):
sumC = sumC + week4[k]
avg4 = (sumC + week4[k]) / 7
sumD = sum + sumA + sumB + sumC
avg = (sum + sumA + sumB + sumC) / 28
就是这样,但这不正确。能帮我一下吗?
5 个回答
3
这里有几个问题。首先,for x in lst
是在遍历 lst
中的元素,而不是它们的位置(索引)。其次,你在计算的时候把元素加了两次,一次是在更新 sum
的时候,另一次是在更新 avg
的时候。其实只需要在列表外面计算 avg
就可以了。第三,除法的时候用 float
(浮点数)而不是 int
(整数),这样可以避免结果被截断:
for x in (week1):
sum = sum + x
avg1 = sum / 7.
4
你不需要这些循环。这里有个简单的例子:
>>> week1 = (35,38,30,34,27,40,39)
>>> average1 = sum(week1) / len(week1)
>>> average1
34
正如评论中提到的:
上面的例子(在 Python 2.x 中)如果你想要“真实”的除法(比如 34.71),需要把其中一个部分转换成浮点数。
在 Python 3.x 中,单个的 /
除法默认就是“真实”的除法,所以上面的 代码片段 就是正确的(虽然 average1
的结果值会不同)。
5
假设你在使用 Python 2.x,两个整数相除时,/
这个符号会进行整数除法,也就是说,结果会向下取整到最近的整数。你可以在交互式解释器中试试看:
>>> 5/3
1
如果你想得到正确的小数除法结果,可以使用
from __future__ import division
或者先把其中一个数字转换成 float
类型。
avg = float(sum + sumA + sumB + sumC) / 28