SHOW:
|
|
- or go back to the newest paste.
1 | """ | |
2 | Troy Goda - inclass9.py | |
3 | Algorithm | |
4 | Define function called makeAverage(student,key): | |
5 | take student[key] and store as scores | |
6 | Set total to 0 | |
7 | for score in scores: | |
8 | set total = total + score | |
9 | take total and divide by length of scores, store as average | |
10 | return average | |
11 | import json | |
12 | Ask user to enter name of JSON file to process, store handle as filename and strip whitespace + \ | |
13 | and force to lowercase letters | |
14 | open filename for reading, store handle as infile | |
15 | use json.loadstring, read all lines in infile, and store in list called mydictionary | |
16 | take ["students"] key of mydictionary, store as studentsList | |
17 | for student in studentsList: | |
18 | print student["name"] + "," + " hw average: " + str(makeAverage(student,"hwscores")) + "," + \ | |
19 | + " exam average: " + str(makeAverage(student,"exams")) | |
20 | 1) | |
21 | - | One reason that JSON files are better than CSV is because JSON files are processed much more easily |
21 | + | One reason that JSON files are better than CSV is because JSON files are processed much more easily |
22 | - | and efficiently than CSV. For this assignment, a CSV file would have 7 different data seperated by commas, |
22 | + | and efficiently than CSV. For this assignment, a CSV file would have 7 different data separated by |
23 | - | and you either need to label each score, or you might not process the data correctly. You would have to |
23 | + | commas,and you either need to label each score, or you might not process the data correctly. You would |
24 | - | split the list and then identify which tokens goes to name, every hwscores, and every exam score. |
24 | + | have to split the list and then identify which tokens goes to name, every hwscores, and every exam score. |
25 | - | This is much slower than using a JSON file where you can just take the keys "name", "hwscores", |
25 | + | This is much slower than using a JSON file where you can just take the keys "name", "hwscores","exams", |
26 | - | "exams", and automatically get the data you want. You also need to convert all of the hwscores |
26 | + | and automatically get the data you want. You also need to convert all of the hwscores and exam scores |
27 | - | and exam scores to a number, because in a CSV file list they are strings. |
27 | + | to a number, because in a CSV file list they are strings. Another reason is that you can have a |
28 | - | Another reason is that you can have a hierachy data, like an xml, but in a much easier and simpler |
28 | + | hierarchy data, like an XML, but in a much easier and simpler form to process and read the file. |
29 | - | form to process and read the file. |
29 | + | |
30 | Jane Doe,85.1,95.0,95.0,92.7,91.4,95.2 | |
31 | John Doe,95.1,90.5,90.1,91.1,81.3,85.6 | |
32 | Bill Gates,60,60,75,98.7,94.4,96.4 | |
33 | ||
34 | """ | |
35 | def makeAverage(student,key): | |
36 | scores = student[key] | |
37 | total = 0 | |
38 | for score in scores: | |
39 | total += score | |
40 | average = total / len(scores) | |
41 | return average | |
42 | import json | |
43 | filename = raw_input("Enter name of JSON file to process: ").strip().lower() | |
44 | #filename = "studentscores.json" | |
45 | infile = open(filename,"r") | |
46 | mydictionary = json.loads(infile.read()) | |
47 | studentsList = mydictionary["students"] | |
48 | for student in studentsList: | |
49 | print student["name"] + "," + " hw average: " + str(makeAverage(student,"hwscores")) + "," + \ | |
50 | - | print student["name"] + "," + " hw average: " + str(makeAverage(student,"hwscores")) + "," + " exam average: " + str(makeAverage(student,"exams")) |
50 | + | + " exam average: " + str(makeAverage(student,"exams")) |