我遇到了这个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)
答案 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)
上面的代码应该很好......只需对你的逻辑进行微小的修改