要求五个值,减去最低值并取平均值

时间:2014-03-13 07:06:32

标签: python

我遇到了这个python代码的问题,该代码应该要求五个值,找到最小值并减去它并找到剩下的四个数字的平均值。我想使用for循环,如果有人可以帮助我创建一个列表,我似乎无法让它工作,所以我按照你的说法进行操作

def get_data():
    name = raw_input("What is your name: ")
    for i in range(5):
            scores = int(input("what are your test scores? ")
    return name, scores

def low_score(scores):
    low = min(scores)
    print low
    return low, scores

def find_avg(scores, low):
    avg = sum(scores)
    print name, "your average = ", avg
    return avg 

name, scores = get_data()
low, scores = low_score(scores)
avg = find_avg(scores, low)

4 个答案:

答案 0 :(得分:0)

行中缺少括号 -

scores = int(input("what are your test scores? ")

猜测这是您问题的根源,因为您还没有提供任何追溯。

答案 1 :(得分:0)

在你的循环中

for i in range(5):
        scores = int(input("what are your test scores? ")

您将覆盖scores五次,而不保存以前的值。

也许你想要这样的东西:

scores = [int(input("what are your test scores? ") for _ in range(5)]

因此,整个任务将归结为:

scores = [int(input("what are your test scores? ") for _ in range(5)]
print('Your top four average is', (sum(scores)-min(scores))/4.0)

答案 2 :(得分:0)

您的方法存在一些问题。在我写一些评论时看看这个:

def get_data():
    name = raw_input("What is your name: ")
    scores = []
    for i in range(5):
        scores.append(int(input("what are your test scores? ")))
    return name, scores

def drop_low_score(scores):
    sorted_scores = sorted(scores)
    print "Dropping", sorted_scores[0]
    highest_four_scores = sorted_scores[1:]
    return scores

def find_avg(scores):
    avg = sum(scores) / float(len(scores))
    print name, "your average = ", avg
    return avg

name, scores = get_data()
scores = drop_low_score(scores)
avg = find_avg(scores)

当您将输入值分配给乐谱时,您每次都会覆盖它。在这里,我将它附加到我在循环之前创建的列表中。

这样想:

scores = []
for i in range(5):
    new_score = int(input("test score?"))
    scores.append(new_score)

每次循环时,您都会在分数列表中附加一个新值。在循环结束时,您的列表中有5个分数。

接下来的问题是你得到的是low_score,但是你没有做任何事情。有几种方法可以解决这个问题。阅读list以了解如何做到这一点。在我的代码中(因为列表很小)我只是对它进行排序并对列表进行切片,在排序后切断第一个(默认排序从小到大),因此它删除了最小的值。你也可以阅读列表切片,但这是一个例子,

>>> my_list = [1, 2, 3, 4]
>>> print my_list[2:]
[3, 4]
>>> print my_list[3:]
[4]
>>> print my_list[:2]
[1, 2]

最后一个问题是你的find_avg根本找不到平均值,只是总结得分。您需要求和除以列表中的元素数。

答案 3 :(得分:0)

    def get_data():
    name = raw_input("What is your name: ")
    scores = []
    for i in range(5):
        scores.append(int(input("what are your test scores? ")))
    return name, scores

def low_score(scores):
    low = min(scores)
    print low
    return low, scores

def find_avg(scores, low):
    indvalue = scores.index(low)
    scores.pop(indvalue)
    avg = sum(scores)/len(scores)
    print name, "your average = ", avg
    return avg 

name, scores = get_data()
low, scores = low_score(scores)
avg = find_avg(scores, low)

上面的代码应该很好......只需对你的逻辑进行微小的修改