2016-03-08 177 views
0

我已經分配了一項任務來爲小學成員創建測驗。我已經釘住了每一項任務,但這一項。讀取CSV文件,計算平均值並打印上述平均值

我必須計算在CSV文件中的分數: •與每個學生的最高分數按字母順序排列的測試 •由最高分,由平均得分最高到最低 •從最高到最低。

下面是我到目前爲止的代碼。儘管我已經有效地跟蹤了PowerPoint,但它似乎沒有計算出平均值。 PowerPoint中的所有內容都在代碼中。

這是我到目前爲止有:

import csv 

results = open("Scores1.csv", "r+") 
csv1 = csv.reader(results, delimiter=",") 


data = [] 

for eachline in csv1: 
    print(eachline) 
    eachline[1] = int(eachline[1]) 
    eachline[2] = int(eachline[2]) 
    eachline[3] = int(eachline[3]) 
    highscore = max(eachline[1:4]) 
    eachline.append(highscore) 
    average = round(sum(eachline[1:4])/3) 
    eachline.append(average) 
    data.append(eachline) 

print(data) 

我得到的錯誤是:

Traceback (most recent call last): 
    File "Z:\My Work\Year 11\Computing\A453 Programming Project\PythonFiles\scores.py", line 17, in <module> 
    eachline[1] = int(eachline[1]) 
IndexError: list index out of range 

我不理解所給我的錯誤,如CSV文件看起來一切精細。 我不是最好的,想要一個簡單的答案,所以我可以有效地理解它,並從中學習。

非常感謝。

+0

您的CSV文件中是否有4列或5列? – MaxU

+0

嗨,我有兩個 - 名稱和分數 –

+0

,但你也訪問第3和第4列:eachline [2],eachline [3] – MaxU

回答

0

在這裏你去:

class Student(object): 

    def __init__(self, name): 
     self.name = name 
     self.scores = [] 
     self.highestscore = 0 

    def __repr__(self): 
     return '<' + self.name + ', ' \ 
       + 'high=' + str(self.highestscore) + ', ' \ 
       + 'avg=' + str(self.getAverage()) + '>' 

    def addScore(self, score): 
     self.scores.append(score) 
     self.highestscore = max(self.highestscore, score) 

    def getAverage(self): 
     l = len(self.scores) 
     if l == 0: 
      return 0 
     else: 
      return sum(self.scores)/l 

import csv 

results = open("C:\Projetos\Data\Python\Scores1.csv", "r+") 
csv1 = csv.reader(results, delimiter=",") 


data = {} 
highscore = 0 

for eachline in csv1: 
    #print(eachline) 
    name = eachline[0] 

    student = data.get(name, None) 
    if student == None: 
     student = Student(name) 
     data[name] = student 

    score = int(eachline[1]) 
    student.addScore(score) 

students = [data[key] for key in data] 

sorted_alphabetically = sorted(students, key=lambda x:x.name) 
sorted_by_highest_score = sorted(students, key=lambda x:x.highestscore, reverse=True) 
sorted_by_avg_score = sorted(students, key=lambda x:x.getAverage(), reverse=True) 

print 'sorted_alphabetically =', sorted_alphabetically 
print 'sorted_by_highest_score =', sorted_by_highest_score 
print 'sorted_by_avg_score =', sorted_by_avg_score 

輸入:

a,3 
b,4 
c,5 
e,4 
a,2 
b,5 
c,6 
e,9 
a,1 
b,3 
c,2 
e,4 

輸出:

sorted_alphabetically = [<a, high=3, avg=2>, <b, high=5, avg=4>, <c, high=6, avg=4>, <e, high=9, avg=5>] 
sorted_by_highest_score = [<e, high=9, avg=5>, <c, high=6, avg=4>, <b, high=5, avg=4>, <a, high=3, avg=2>] 
sorted_by_avg_score = [<e, high=9, avg=5>, <c, high=6, avg=4>, <b, high=5, avg=4>, <a, high=3, avg=2>] 
+0

謝謝。我將以此爲例 –

0

看看大熊貓書庫,例如,可以像這樣獲得行的平均值和最大值,但你的例子應該更精確,不能真正看到csv文件的確切結構:

import pandas as pd 

data = pd.read_csv("Scores1.csv") 
data['mean']= data.mean(axis=1) 
data['max'] = data.max(axis=1) 
+0

謝謝,我會研究這個 –