2

2.7.x

 rate = raw_input('Rating: ')

您将如何保存每个数字并最终获得平均值?在该行代码之前,它是:

for i in range(n):

非常感激。

编辑:

用代码调整后,我得到了这个:

  L = []

for i in range(n):

    line = raw_input('Next Track: ')
    m = L.append(raw_input('Rating: '))
    overall = sum(map(int, L)) / len(L)

    f.write("Track Name: " + line + " - Rating: " + str(m) + "\n")
f.close()

f = open('music.txt','a')



print "Overall Rating: ", overall


f = open("music.txt", 'a')
f.write("Overall Rating: " + str(overall) + "\n")
f.write("---------------------------\n")
f.close

现在,问题是,每当我输入一个评级数字时,它都会在文件中显示为“无”。为什么?

4

2 回答 2

2

将值附加到列表中:

L = []
for i in range(n):
    L.append(raw_input('Rating: '))

然后,您可以获得列表的平均值:

sum(map(int, L)) / len(l)

或者,您可以使用列表推导:

L = [int(raw_input('Rating: ')) for _ in range(n)]
sum(L) / len(L)

但是,如果您正在处理浮点数,则使用它来获取平均值:

from __future__ import division
sum(L) / len(L)

from __future__ import division将 更改/为真正的除法运算符。真正的除法在 python 3 中是活跃的,但是就像你在 python 2.7 上一样,你可以直接导入它。


使用您的代码,存在一些问题:

L.append(raw_input('Rating: '))返回None。您不需要将其分配给变量,因此摆脱m =.

但是,您似乎想保留 的值,m以便将其写入文件中。然后,您可以执行以下操作:

m = raw_input("Rating: ")
L.append(m)

也不需要str(m), 因为raw_input()返回一个字符串。


最后,您应该with在打开文件时使用该语句。这样可以节省调用close()

with open('music.txt','a') as f:
    for i in range(n):
        line = raw_input('Next Track: ')
        m = raw_input("Rating: ")
        L.append(m)
        overall = sum(map(int, L)) / len(L)
        f.write("Track Name: " + line + " - Rating: " + m + "\n")
于 2013-06-22T02:56:10.573 回答
0

您还可以使用移动平均线一次性完成此操作:

>>> avg = 0.0
>>> for i in range(3):
        avg = (avg * i + float(raw_input('Rating: '))) / (i + 1)


Rating: 3
Rating: 5
Rating: 7
>>> avg
5.0

但这只有在您还不知道n等于的情况下才有用,在您的情况下,我会这样做:

>>> avg, n = 0.0, 3
>>> for i in range(n):
        avg += float(raw_input('Rating: '))


Rating: 3
Rating: 5
Rating: 7
>>> avg /= n
>>> avg
5.0
于 2013-06-22T03:22:42.060 回答