2013-11-02 263 views
-2

我是python編程的新手。我正在做一個課堂作業,並且到目前爲止獲得了下面的代碼。我們正在努力的下一步是寫一個函數,它將顯示/打印最低分數和平均分數。任何方向將不勝感激。Python函數得到最低分和平均分

scores = """Aturing:Mark$86: 
Inewton:Mark$67.5: 
Cdarwin:Mark$90: 
Fnightingale:Mark$99: 
Cvraman:Mark$10:""" 

students = {} 
for studentdata in scores.split('\n'): 
data = studentdata.split(':') 
name = data[0] 
students[name] = {} 
for class_data in data[1:]: 
    if class_data: 
     Mark,class_score = class_data.split('$') 
     students[name][Mark] = class_score 

def Grade_Show(student,Mark): 
    if student in students: 
     if Mark in students[student]: 
      print "Student %s got %s in the assignment %s" % (student,students[student][Mark],Mark) 
     else: 
      print "subject %s not found for student %s" % (Mark,student) 
    else: 
     print "student %s not found" % (student) 

#do some testing 
Grade_Show("Inewton","Mark") 
+1

什麼你不能實現/是錯誤的? – alko

回答

0

測試用:scores = {'alex': 1, 'dave': 1, 'mike': 2};

首先,找到得分最低,使用min()功能。

所以:

min_keys = [k for k, x in scores.items() if not any(y < x for y in scores.values())] 

print('Lowest score:', str(min(scores.values())) + '.', 'Achieved by: ') 
for student in min_keys: 
    print(student) 

輸出:

Lowest score: 1. Achieved by: 
alex 
dave 

其次,假設你正在尋找的平均平均水平,你可以這樣做:

print('The average score was:', str(sum(scores.values())/len(scores)))

輸出:

The average score was: 1.3333333333333333

希望我幫了忙 - 現在您需要做的就是創建一個包含該代碼的函數,其參數爲data。這樣你可以有多個字典來表示不同的類或測試。您將用代碼data替換score中的所有實例。

此外,'最低分'代碼可以很容易地修改,以給出最高分。最後,根據程序的大小,您可以將輸出存儲在一個變量中,而不是使用print語句,以便稍後再調用它。這也意味着你應該return的結果,而不是print它。

0

是很掙扎的下一步是寫一個函數會 顯示/打印的最低分和平均分。

第1步:

你可以通過你的數據結構(students)和print只有分數迭代?如果你能做到這一點,那麼你應該能夠通過並找到最低分。

要找到最低分數,請從一些想象中的最大可能值開始(將某些變量設置爲100,例如,如果這是最高可能的值)並遍歷所有分數(for score in score...等),測試以查看如果您獲得的每個值都低於您創建的變量。

如果它較低,請使您創建的變量等於該較低值。之後,它將繼續迭代以查看是否有任何新值小於此新的「最低」值。到它結束的時候,它應該爲您提供最低的價值。

一個棘手的部分是確保打印名稱和最低值,如果這是問題的要求。

第2步:

爲了解決這個問題,一般,你會做類似的,你遍歷得分的東西,將它們添加到一個新的數據結構,然後找出如何採取平均他們。