2014-03-13 66 views
0

我遇到了這個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

我得到一個語法錯誤 – user3317056

+0

你缺少* subtraxt最低值*一部分。 –

回答

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它根本不會找到一個平均值,它只是相加的分數。您需要總結併除以列表中的元素數量。

0

你有一個丟失工作,要麼所以我做支架在該行 -

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

猜測這是你的問題的根源,因爲你沒有提供任何回溯。

+0

是的,它使它運行!但現在我得到一個新的錯誤:回溯(最近呼叫最後): 文件「C:\ Users \ Imran \ Desktop \ Lab7(2).py」,第16行,在 name,scores = get_data() 文件「C:\ Users \ Imran \ Desktop \ Lab7(2)。py「,第3行,在get_data 爲我在範圍[5]: TypeError:'builtin_function_or_method'對象沒有屬性'__getitem__' – user3317056

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) 
+0

我怎麼不覆蓋他們?對不起,我試圖教我自己 – user3317056

+0

@ user3317056看在我發佈的第二個代碼片段中。 – Hyperboreus

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) 

上面的代碼應該在你的邏輯WRK罰款......稍作修改

相關問題