
Problem: We need to create 3 dictionaries which have 3 students’ information like name, marks and all and then we would try to write few functions to calculate their average and class’s grades.
Solution: You can follow each steps mentioned in the tutorial and try yourself. Click here Code Academy or can refer to below code for hint.
########################################## ## The code is written for the Code Academy tutorial. ## Please follow their website for more information. ## Author: Deepesh Singh ## Purpose: To learn and practice ########################################## # Creating the list of 3 students with their relative information lloyd = { "name": "Lloyd", "homework": [90.0, 97.0, 75.0, 92.0], "quizzes": [88.0, 40.0, 94.0], "tests": [75.0, 90.0] } alice = { "name": "Alice", "homework": [100.0, 92.0, 98.0, 100.0], "quizzes": [82.0, 83.0, 91.0], "tests": [89.0, 97.0] } tyler = { "name": "Tyler", "homework": [0.0, 87.0, 75.0, 22.0], "quizzes": [0.0, 75.0, 78.0], "tests": [100.0, 100.0] } # This function will calculate average. Say if we pass tests it will sum # the score of tests and then divide by numbers of tests # Example: for typer tests it would be average(tests) = (100 +100)/2 = 100 def average(numbers): total = sum(numbers); total = float(total) return (total/len(numbers)) # This function will call above average function and will calculate average # for all entities like homework, quizzes and tests # And then will return the final result based on weightage of each entity def get_average(student): homework = average(student["homework"]) quizzes = average(student["quizzes"]) tests = average(student["tests"]) wt_score = (homework * .10 + quizzes * .3 + tests *.6) print ('Average Score: %s -> %s') % (student['name'],wt_score) return wt_score # The function will return the final result based on the score def get_letter_grade(score): if score >=90: return "A" elif score >=80: return "B" elif score >= 70: return "C" elif score >=60: return "D" else: return "F" # In this function we will pass the list of students and will append their average score def get_class_average(students): #Creating a blank list results = []; for student in students: #Calling average function for each student #and then appending the result in the result list results.append(get_average(student)) #Here we have result list which will look like result[87,78,89] print ("\nAppened results of 3 students %s") % (results) return average(results) #Creating a list of all 3 students students = [lloyd,alice,tyler] #Calling the get_average functions for all students final_result = get_class_average(students) print ("\nFinal average of class:") print final_result print ("\nFinal grade of class:") print get_letter_grade(final_result)
Result:
Average Score: Lloyd -> 80.55
Average Score: Alice -> 91.15
Average Score: Tyler -> 79.9
Appened results of 3 students [80.55, 91.14999999999999, 79.9]
Final average of class:
83.8666666667
Final grade of class:
B
Please comment if you have better solution. Also please like if the solution helped you in any way. Looking for your suggestions.