2016-05-27 13 views
-1

私は3つの機能を持っています.1つはラボ平均を計算する関数、もう1つは重み付けスコア、もう1つはプログラム平均です。これらの関数は、ユーザーが選択した特定の生徒のスコアを計算します。 (例について。ラボの平均を計算します。唯一Ablao他のない学生のための)累積平均を計算する(私はそれをどうしますか?)

Ablao 3 74 96 72 88 71 80 83 77 90 88 95 71 76 94 80 74 98 77 
Anderson 3 76 92 98 95 92 76 93 97 85 76 85 93 82 88 75 84 92 77 
Aspinwall 1 86 74 78 97 86 94 73 95 74 91 75 94 83 99 83 78 88 96 
Bacon 4 72 95 81 80 89 88 100 87 87 81 79 77 75 83 87 96 72 95 

ファイル内の60人の学生のための情報があります。名前の後の最初の数字は学生の成績を表しています。 1 =新入生2 =ソフォモアなど

私は既存の関数を使って、すべての生徒の平均を計算し、各成績についての生徒の平均を計算し、最大値を見つける新しい関数を作成する必要がありますそして分。

この関数のためにこれまでに書いたコードは機能せず、問題への接近方法を知らない。

with open(FileName, 'r') as f: 
    line = f.readlines() 

student_status=(float(line.split()[1])) 

def make_lists_of_status(): 
    if (student_status==1): 
     Freshman.append(student_scores) 
    elif (student_status==2): 
     Sophomores.append(student_scores) 
    elif (student_status==3): 
     Juniors.append(student_scores) 
    elif (student_status==4): 
     Seniors.append(student_scores) 

の予想される出力は、この辞書で行うことができます

This option is for viewing statistics sorted by the year of student. 
    Please select one of the following options: 
    a for ALL YEARS 
    b for FRESHMAN 
    c for SOPHMORES 
    d for JUNIORS 
    e for SENIORS 

Enter your choice here: e 

For Seniors: 
High/Low/Mean of all Weighted Scores: 89.53999999999999/ 81.60000000000001/86.15736842105264 
High/Low/Mean of all Lab Averages: 89.6/80.2/86.21052631578948 
High/Low/Mean of all Program Averages: 94.33333333333333/77.0/86.78947368421052 
+0

あなたは私たち他の三つの機能のためにあなたのコードを示してもらえますか?すべての生徒の結果の平均を計算することを意味しますか? –

+0

@MoonCheezes関数は一度に1人の学生のために働くが、これは想定されているが、私はすべての学生のために計算し、等級別にスコアを並べ替える新しい関数が必要である – Rachel

答えて

0

ようにする必要があります。

students = {} 

with open("inCSV.txt", "r") as f: 
    for line in f.readlines(): 
     data = line.rstrip().split(" ") 

     student_name = data[0] 
     student_grade = data[1] 
     student_data = [int(x) for x in data[2:]] 
     student_avg = sum(student_data[2:])/float(len(student_data[2:])) 

     # Set the students name to a tuple of student's grade and average 
     students[student_name] = (student_grade, student_avg) 

# Sort the students by their averages. (Descending order) 
# Add reverse=True to have it in ascending order 
print sorted(students.keys(), key=lambda x: students[x][1]) 

それはまだ同様の方法で行うことができEDIT

students = {} 

def weighted_scores(x): 
    return x 

with open("inCSV.txt", "r") as f: 
    for line in f.readlines(): 
     data = line.rstrip().split(" ") 

     student_name = data[0] 
     student_grade = data[1] 
     student_data = [int(x) for x in data[2:]] 

     student_program_avg = sum(student_data[2:])/float(len(student_data[2:])) 
     # Edit this part to your code 
     student_weighted_scores = weighted_scores(data[2:]) 
     student_lab_averages = lab_average(data[2:]) 

     students[student_name] = (student_grade, 
            student_weighted_scores, 
            student_lab_averages, 
            student_program_avg) 
print students 

def get_level(x): 
    ret_dict = {} 
    for k, v in students: 
     if v[0] == x: 
      ret_dict[k] = v 


def choose(x): 
    people = get_level(x) 
    overall = [] 

    for s in range(1, 4): 
     # Get grades of either weighted scores, lab averages or just average. 
     # Sort grades in descending order 
     grades = sorted(people.keys(), key=lambda x: people[x][s]) 

     highest = grades[0] 
     lowest = grades[-1] 
     mean = sum(grades[2:])/float(len(grades[2:]) 

     overall.append((highest, lowest, mean)) 

    # overall[0] => weighted scores 
    # overall[1] => lab averages 
    # overall[2] => program average 
    # overall[x][0] => highest of x 
    # overall[x][1] => lowest of x 
    # overall[x][2] => mean of x 

    print "For %i level:" % (x) 
    print "High/Low/Mean of Weighted Scores: %i/%i/%i" % (overall[0][0], overall[0][1], overall[0][2]) 
    print "High/Low/Mean of Lab Averages: %i/%i/%i" % (overall[1][0], overall[1][1], overall[1][2]) 
    print "High/Low/Mean of Weighted Scores: %i/%i/%i" % (overall[2][0], overall[2][1], overall[2][2]) 

# Let's say you picked seniors: 
choose(4) 
+0

Iveはこのコードを変更しているが、 。あなたはoverall.appendの下にあるコメントは何ですか? @MoonCheesez – Rachel

+0

これらのコメントは、全体のリストをどのように索引付けするかについて説明しています。 'x'は加重スコア、実験室平均またはプログラム平均のいずれかです。 –

+0

0の場合は、0の場合は0、-1の場合は-1を置き換えます。 @MoonCheesez – Rachel

0

私はこれが何をしたいんだと思う:

scores_student = {} 
scores_grade = [[],[],[],[]] 
scores_all  = [] 
with open("students.txt", "r") as f: 
    for line in f: 
     # Parse the line 
     toks = line.split() 
     name = toks[0] 
     grade = int(toks[1]) 
     scores = [float(tok) for tok in toks[2:]] 
     # Save scores both per student, in that student's grade, and total 
     scores_student[(name,grade)] = scores 
     scores_grade[grade-1] += scores 
     scores_all += scores 

# Print individual student info 
print "Students" 
for name,grade in sorted(scores_student): 
    score = scores_student[(name,grade)] 
    print "%-10s %d mean %4.1f max %3d min %3d" % (name, grade, sum(score)/len(score), max(score), min(score)) 
print 
print "Summary" 
for grade, score in enumerate(scores_grade): 
    if len(score) > 0: 
     print "grade %d mean %4.1f max %3d min %3d" % (grade+1, sum(score)/len(score), max(score), min(score)) 
print "all  mean %4.1f max %3d min %3d" % (sum(scores_all)/len(scores_all), max(scores_all), min(scores_all)) 
+0

質問を編集して、予想される出力@amaurea – Rachel