从用户输入中保存数字并获得平均值

时间:2013-06-22 02:55:05

标签: python user-input

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

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

2 个答案:

答案 0 :(得分: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")

答案 1 :(得分:0)

您也可以使用moving average一次完成此操作:

>>> 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