2014-10-11 31 views
0

我使用Python 3.4.1,我試圖寫,做下面的代碼:找到一個集體的平均和字母等級爲測試及分配

class Student(object): 
    def __init__(self, name): 
     self.name, self.grades = name, [] 

    def append_grade(self, grade): 
     self.grades.append(grade) 

    def average(self): 
     return sum(self.grades)/len(self.grades) 

    def letter_grade(self): 
     average = self.average() 
     for value, grade in (90, "A"), (80, "B"), (70, "C"), (60, "D"): 
      if average >= value: 
       return grade 
     else: 
      return "F" 

def main(): 
    print() 
    a_class = [] # "class" by itself is a reserved word in Python, avoid using 
    while True: 
     print() 
     print('{} students in class so far'.format(len(a_class))) 
     another_student = input('Do you have another student to enter (y/n) ? ') 
     if another_student[0].lower() != 'y': 
      break 
     print() 
     student_name = input('What is the student\'s ID? ') 
     a_class.append(Student(student_name)) 
     print() 
     print('student :', student_name) 
     print('------------------------------------------------') 
     number_of_tests = int(input('Please enter the number of tests : ')) 
     for test_num in range(1, number_of_tests+1): 
      print('test grade {}'.format(test_num), end='') 
      score = float(input(' : ')) 
      if score < 0: # stop early? 
       break 
     number_of_assignments = int(input('Please enter the number of assignments : ')) 
     for assignment_num in range(1, number_of_assignments+1): 
      print('assignment grade {}'.format(assignment_num), end='') 
      score2 = float(input(' : ')) 
      if score2 < 0: # stop early? 
       break 
     number_of_participation = int(input('Please enter 1 to add participation grade : ')) 
     for participation_num in range(1, number_of_participation+1): 
      print('participation grade {}'.format(participation_num), end='') 
      score3 = float(input(' : ')) 
      if score3 < 0: # stop early? 
       break 

      a_class[-1].append_grade(score + score2 + score3) # append to last student added 

    print_report(a_class) 

def print_report(a_class): 
    print() 
    print('Student Grades') 
    print() 
    for student in sorted(a_class, key=lambda s: s.name): 
     print('student: {:20s} average test score: {:3.2f} grade: {}'.format(
      student.name, student.average(), student.letter_grade())) 
    print() 
    print('The class average is {:.2f}'.format(class_average(a_class))) 

def class_average(a_class): 
    return sum(student.average() for student in a_class)/len(a_class) 

main() 

這裏的任務是把信等級通過添加3種不同的東西並獲得平均值,這是一名學生的。我需要能夠輸入考試成績,作業分數和1個參與成績。那些需要平均出來並給我一個最後的字母等級。我能夠找出如何做一組平均得分,但當我添加其他得分時,平均數是錯誤的。我可以在這裏編輯什麼?

+0

請參閱http://stackoverflow.com/help/mcve切下來到最低,格式正確的例子。另外,請提供比「平均數錯誤」更好的錯誤描述* - 輸入數據和預期和實際輸出數據是什麼? – jonrsharpe 2014-10-11 15:31:08

+1

縮進在Python中至關重要,但您在文章中設法丟失了大部分內容。你能解決這個問題嗎? – 2014-10-11 15:31:11

+1

接下來,您需要告訴我們*什麼錯誤。什麼投入?你期望的輸出是什麼?你取得了什麼? – 2014-10-11 15:31:44

回答

0

我沒有看的很詳細,但這樣的:

a_class[-1].append_grade(score + score2 + score3) 

...讓我懷疑自己添加一個單一的價值等級的名單,也就是100%以上。這可能會導致你的平均數太高。

相反,你可能應該:

a_class[-1].append_grade(score) 
a_class[-1].append_grade(score2) 
a_class[-1].append_grade(score3)