2014-03-03 391 views
0

python 3.3.3用python計算學生/班級平均值

我想爲班級寫一個程序,我迷路了。這是我需要做的。

我需要根據輸入的成績計算每個學生的平均水平。 我需要計算一個班的平均水平。 如果學生輸入等級-1輸入等級停止。 需要打印每個學生成績的訊息。 學生成績應顯示數字成績和字母成績。 該信息將基於學生信等級。

我如何收集和儲存學生姓名和考試成績。 ,這樣我就可以一次輸出它,它會顯示學生姓名。 他們的數字平均值,基於該平均值的字母等級, 和基於他們收到的字母等級的聲明

繼承人的代碼,我到目前爲止:

def main(): 
    another_student = 'y' 
    while another_student == 'y' or another_student == 'Y': 
     student_average() 
     print() 
     another_student = input('do you have another student to enter (y/n) ? ') 
    while another_student == 'n' or another_student == 'N': 
     student_average_list() 
     class_average() 
     break 

def student_average(): 
    total = 0.0 
    print() 
    student_name = input('what is the students name? ') 
    print() 
    print() 
    print(student_name) 
    print('-------------------') 
    number_of_tests = int(input('please enter the number of tests : ')) 
    for test_num in range(number_of_tests): 
     print('test number', test_num + 1, end='') 
     score = float(input(': ')) 
     total += score 
    student_average = total/number_of_tests 
    print() 
    print(student_name,"'s average is : ",student_average, sep='') 

def student_average_list(): 
    print ('kahdjskh') 

def class_average(): 
    print ('alsjd') 

main() 

回答

0

你需要保持標記列表全班。 student_average函數做的事情太多了。也許做一個函數get_student_marks,它只是返回學生的標記列表。您需要使用average函數來計算列表的平均值,您可以使用它來計算學生平均值和班級平均值。祝你好運!

1

我認爲這接近你基本尋找的東西。它定義了一個Student類,以使數據存儲和處理更容易管理。

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() 
    print('Collecting class student information') 
    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 name? ') 
     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 number {}'.format(test_num), end='') 
      score = float(input(' : ')) 
      if score < 0: # stop early? 
       break 
      a_class[-1].append_grade(score) # append to last student added 

    print_report(a_class) 

def print_report(a_class): 
    print() 
    print('Class Report') 
    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()