Average GPA
Write a program that takes a course number, units and grade delimited by spaces, and computes the average GPA when the user doesnt provide input.
import re
from re import findall
GPAG = {"A+":4.3,
"A":4,
"A-":3.7,
"B+":3.3,
"B":3,
"B-":2.7,
"C+":2.3,
"C":2,
"C-":1.7,
"D+":1.3,
"D":1,
"D-":0.7,
"F":0}
all_units = []
all_letter_grades = []
def getGrade(user_input):
all_data = user_input.split()
all_units.append(int(all_data[1]))
all_letter_grades.append(all_data[2])
def calcGPA():
total_qp = 0
total_hours = 0
for i in range(len(all_units)):
letter = all_letter_grades[i]
hrs = all_units[i]
total_hours += hrs
total_qp += GPAG[letter] * hrs
return round(total_qp/total_hours, 2)
while True:
user_input= input('Enter course number, units, and grade, separated by spaces\n')
if not user_input:
print("The GPA is:", calcGPA())
break
else:
getGrade(user_input)
Now improve your program to take in a file of student summary course, and output to a file that summaries the average GPA per student.
File in:
eric, davidson
ecs10 4 B-
ecs30 3 C+
dan, mak
ecs50 4 A
ecs60 4 A
sas30 4 A
eric, davidson 2.52
dan, mak 4.00
#12.8 GPA reports using files
GPAG = {'A':4.0,
'A-':3.67,
'B+':3.33,
'B':3.0,
'B-':2.67,
'C+':2.33,
'C':2.0,
'C-':1.67,
'D+':1.33,
'D':1.0,
'D-':0.67,
'B+':0.33,
'B':0.0
}
all_units = []
all_letter_grades = []
current_name = "";
def calcGPA():
total_qp = 0
total_hours = 0
for i in range(len(all_units)):
letter = all_letter_grades[i].rstrip()
hrs = all_units[i]
total_hours += hrs
total_qp += GPAG[letter] * hrs
return round(total_qp/total_hours, 2)
def contains_comma(line):
for char in line:
if (char == ','):
return True
def contains_number(line):
for char in line:
if (char.isdigit()):
return True
file_out = open("GPA_output.txt", "w")
file_in=input('Enter the file name: ')
with open(file_in, 'r') as file:
lines = file.readlines()
for line in lines:
if (contains_comma(line)):
current_name = line.rstrip();
continue
elif(contains_number(line)):
course_unit_grade = line.split(' ');
all_units.append(int(course_unit_grade[1]))
all_letter_grades.append(course_unit_grade[2]);
continue;
elif(line == "\n"):
file_out.write('%-26s%.2f\n' % (current_name, calcGPA()));
all_units = []
all_letter_grades = []
current_name = ""
file_out.write('%-26s%.2f' % (current_name, calcGPA()));
file_out.close();
Last updated