Question

12.8 GPA reports using files This program is to compute and write to a file the...

12.8 GPA reports using files

This program is to compute and write to a file the GPA for student scores read from an input file. As in Lab 7.5, the point values of the grades are 4 for A, 3 for B, 2 for C, 1 for D, and 0 for F. Except for the grade A, where + has no effect, a + after the letter increases the point value by 0.3, and except for F, where a - has no effect, a - after a letter decreases the point value by 0.3, so, for example, B- is worth 3 - 0.3 = 2.7 points. The weighted points for a course is the point value of the grade, multiplied by the number of units for the course. The weighted average for the GPA is then the sum of these weighted points, divided by sum of the units.

Prompt the user by "Enter name of input file: " for the name of an input file and open that file for reading. The two input files for the tests are already at the zyBooks site.They each have a list of student names with the course they have taken, of the form

Jacobs, Anthony 
ECS10 4 B- ECS20 4 C+ 
ANS17 3 A 
ANS49H 2 D 
Wilson, Elaine 
ECS10 4 B+ 
ECS20 4 C+ 
ANS17 3 A 
ANS49H 2 D 
ANS100 5 B-

with the student name on one line, and a list of that student's course names, units, and grades on a sequence of following lines, terminated by a blank line before the next student name line. The input will be terminated either by a second blank line where the next name would be, which will appear as just "\n", or by the file ending with either no new line character at the end of the last course line for the last student, or just one, which will result in just the empty string "" when reading in any more lines. (The input for the hidden second test ends with just one blank line after the last course.) To repeat this in a different way:

You need to correctly handle 3 cases:

a) The file ends at the end of the last course line, just after the last grade, with no \n character at all.

b) The input file ends with a single \n character at the end of the last grade line (as is normal on all other lines).

c) The file ends with two \n characters, one to end the last grade line, and one blank line, as would normally occur before another student name.

The program should open and write an output file named "GPA_output.txt" of the form:

Jacobs, Anthony 2.62 
Wilson, Elaine 2.77

with each line containing a student name and the GPA, which must be computed by the program. The format of each line must have the name left adjusted, in a field with a total of 26 spaces, followed immediately by the GPA, with two decimal places. You can do this with a "%" style formatted output of the form:

f.write("%-26s%.2f\n" % (student_name, GPA))

or a "…".format() style formatted output of the form

f.write("{:<26s}{:.2f}\n".format(student_name, GPA))

Note that the "\n" is needed at the end of the quoted format specification, because unlike print(), f.write() does not automatically put a new line character at the end of the line.

The input given above is for the first test, and the file "GPA_input.txt" from which it was taken is in the canvas File Folder for "Week 9" of "Programs shown in class", so that you can use it for testing your program before submitting it. You will probably need to do such testing because unlike the other assignments, if your program has problems that prevent it from getting to the stage of writing the output file, the error reported will just be "Could not find file: GPA_output.txt" which is not very useful. The output file for this input, "GPA_output.txt" is also in the Week 9 folder for you to compare, since white space is important here.

0 0
Add a comment Improve this question Transcribed image text
Answer #1

Please find below the python code for above statement. Also see the attached picture for required indentation and output for the program. Please read the comments to understand the code. The program has been tested for all 3 scenarios mentioned i.e.

a. If the file ends without \n

b. If the file ends with 2 \n

c. If the file ends with 1 \n

PS: The Program will run irrespective of how it ends. Even if there are many \n at the end of file, the program will be fine.

PS: If you are satisfied with answer that you have got, please take a couple of seconds to rate the answer. Thanks.

GPA.py

#Take input from the user
filename=input('Enter name of input file: ')
total_units=0#Total number of units for a student
total_score=0#Total score of a student
#Assign a score to each grade. I have reduced 0.33 for each grade. Change here if you need to
grade={'A':4.0,'A-':3.67,'B+':3.34,'B':3.01,'B-':2.68,'C+':2.35,'C':2.02,'C-':1.69,'D+':1.36,'D':1.03}
try:
with open(filename,"r") as input_file:#Open the file for input(reading)
output_file=open("GPA_output.txt","w") #Create and open GPA_output.txt if it doesn't exist for writing
for student_record in input_file:#read from input file
if("," in student_record):#if there is a , that means this is the student name
student_name=student_record.strip('\n')#Remove \n from student name
continue
else:
if(" " in student_record):#If a line contains spaces then its the student's grades for a course
student=student_record.split(" ")#Split to find the coursename, units and grade
#student[0]=coursename student[1]=units student[2]=grade
total_units+=int(student[1])#Calculate total units for 1 student
total_score+=int(student[1])*grade[student[2].strip('\n')]#Find the total score of a student
#grade[student[2]] will lookup for the score that we initialized earlier
#if student has a grade as A then this will look up as grade['A'] which will return 4
#Find the total score as product of this grade and units for this course
continue
else:
if(total_units>0):#Check if score has been calculated for a student earlier
print("in")
GPA=total_score/total_units#Calculate the GPA
output_file.write("%-26s%.2f\n" % (student_name, GPA))#Write the GPA and Student Name in the required format
total_units=0#reset the units
total_score=0#reset the score
if(total_units>0):#Essential for the case when the file doesn't end with a new line(Check if total_units is not 0) which means a record is pending
#to be written to the file
GPA=total_score/total_units#Calculate the GPA
output_file.write("%-26s%.2f\n" % (student_name, GPA))#Write the GPA and Student Name in the required format
total_units=0#reset the units
total_score=0#reset the score
input_file.close()#Close the input file
output_file.close()#Close the output file
except IOError as e:
print("Problem in Opening the required file")#Print a message if file cannot be opened

FTake input from the user filename-input(Enter name of input file: ) total_units=0#Total number of units for a student tota

output:

== RESTART: F:/Python Programs/GPA.py Enter name of input file: GPA input.txt == RESTART: F:/Python Programs/GPA.py Enter naminput file:

Help GPA_input.txt - Notepad File Edit Format View Jacobs, Anthony ECS10 4 B- ECS20 4 C+ ANS17 3 A ANS49H 2 D Wilson, Elaineoutput file:

GPA_output.txt - Notepad Eile Edit Format View Help Jacobs, Anthony Wilson, Elaine 2.63 2.79

Add a comment
Know the answer?
Add Answer to:
12.8 GPA reports using files This program is to compute and write to a file the...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
  • 12.8 GPA reports using files Prompt the user by "Enter name of input file: " for...

    12.8 GPA reports using files Prompt the user by "Enter name of input file: " for the name of an input file and open that file for reading. The two input files for the tests are already at the zyBooks site.They each have a list of student names with the course they have taken, of the form Jacobs, Anthony ECS10 4 B- ECS20 4 C+ ANS17 3 A ANS49H 2 D Wilson, Elaine ECS10 4 B+ ECS20 4 C+ ANS17...

  • Program 5 Due 10/25 C-String and Two-dimensional Array Use An input data file starts with a...

    Program 5 Due 10/25 C-String and Two-dimensional Array Use An input data file starts with a student's name (on one line). Then, for each course the student took last semester, the file has 2 data lines. The course name is on the first line. The second line has the student's grade average (0 to 100) and the number of credits for the course Sample data: Jon P. Washington, Jr. Computer Science I 81 4 PreCalculus 75 3 Biology I 88...

  • Write a C program to compute average grades for a course. The course records are in...

    Write a C program to compute average grades for a course. The course records are in a single file and are organized according to the following format: Each line contains a student’s first name, then one space, then the student’s last name, then one space, then some number of quiz scores that, if they exist, are separated by one space. Each student will have zero to ten scores, and each score is an integer not greater than 100. Your program...

  • In C++ Write a menu driven C++ program to read a file containing information for a list of Students, process the data, t...

    In C++ Write a menu driven C++ program to read a file containing information for a list of Students, process the data, then present a menu to the user, and at the end print a final report shown below. You may(should) use the structures you developed for the previous assignment to make it easier to complete this assignment, but it is not required. Required Menu Operations are: Read Students’ data from a file to update the list (refer to sample...

  • FOR JAVA Write a program that takes two command line arguments: an input file and an...

    FOR JAVA Write a program that takes two command line arguments: an input file and an output file. The program should read the input file and replace the last letter of each word with a * character and write the result to the output file. The program should maintain the input file's line separators. The program should catch all possible checked exceptions and display an informative message. Notes: This program can be written in a single main method Remember that...

  • Problem Specification: Write a C++ program to calculate student’s GPA for the semester in your class. For each student, the program should accept a student’s name, ID number and the number of courses...

    Problem Specification:Write a C++ program to calculate student’s GPA for the semester in your class. For each student,the program should accept a student’s name, ID number and the number of courses he/she istaking, then for each course the following data is needed the course number a string e.g. BU 101 course credits “an integer” grade received for the course “a character”.The program should display each student’s information and their courses information. It shouldalso display the GPA for the semester. The...

  • Must be written in JAVA Code Write a program that will read in a file of student academic credit data and create a list of students on academic warning. The list of students on warning will be written...

    Must be written in JAVA Code Write a program that will read in a file of student academic credit data and create a list of students on academic warning. The list of students on warning will be written to a file. Each line of the input file will contain the student name (a single String with no spaces), the number of semester hours earned (an integer), the total quality points earned (a double). The following shows part of a typical...

  • implicit none !   Declare File Read Variables     CHARACTER(255) :: Line     INTEGER :: CP !...

    implicit none !   Declare File Read Variables     CHARACTER(255) :: Line     INTEGER :: CP ! Character position in Line     INTEGER :: File_Read_Status !   Declare character constants     CHARACTER :: Tab > ACHAR(1)     CHARACTER :: Space = " " !   Read all lines in the file         DO             READ(*,'(A)',iostat = File_Read_Status) Line !       Exit if end of file             IF (File_Read_Status < 0) EXIT !       Skip leading white space          DO CP = 1, LEN_TRIM(Line)              IF...

  • Write a C++ program to store and update students' academic records in a binary search tree....

    Write a C++ program to store and update students' academic records in a binary search tree. Each record (node) in the binary search tree should contain the following information fields:               1) Student name - the key field (string);               2) Credits attempted (integer);               3) Credits earned (integer);               4) Grade point average - GPA (real).                             All student information is to be read from a text file. Each record in the file represents the grade information on...

  • Write a program in Java according to the following specifications: The program reads a text file...

    Write a program in Java according to the following specifications: The program reads a text file with student records (first name, last name and grade on each line). Then it prompts the user to enter a command, executes the command and loops. The commands are the following: "print" - prints the student records (first name, last name, grade). "sortfirst" - sorts the student records by first name. "sortlast" - sorts the student records by last name. "sortgrade" - sorts the...

ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT