Week 5 - Programming Assignment (Programming, Datastructures and Algorithms using Python) (NPTEL 2022 - CS26)
The academic office at the Hogwarts School of Witchcraft and Wizardry has compiled data about students' grades. The data is provided as text from standard input in three parts: information about courses, information about students and information about grades. Each part has a specific line format, described below..
- Information about courses
Line format: Course Code~Course Name~Semester~Year~Instructor - Information about students
Line format: Roll Number~Full Name - Information about grades
Line format: Course Code~Semester~Year~Roll Number~Grade
The possible grades are A, AB, B, BC, C, CD, D with corresponding grade points 10, 9, 8, 7, 6, 5 and 4. The grade point average of a student is the sum of his/her grade points divided by the number of courses. For instance, if a student has taken two courses with grades A and C, the grade point average is 8.50 = (10+7)÷2. If a student has not completed any courses, the grade point average is defined to be 0.
You may assume that the data is internally consistent. For every grade, there is a corresponding course code and roll number in the input data.
Each section of the input starts with a line containing a single keyword. The first section begins with a line containing Courses. The second section begins with a line containing Students. The third section begins with a line containing Grades. The end of the input is marked by a line containing EndOfInput.
Write a Python program to read the data as described above and print out a line listing the grade point average for each student in the following format:
Roll Number~Full Name~Grade Point Average
Your output should be sorted by Roll Number. The grade point average should be rounded off to 2 digits after the decimal point. Use the built-in function round().
Here is a sample input and its corresponding output.
Sample Input
Courses TRAN~Transfiguration~1~2011-2012~Minerva McGonagall CHAR~Charms~1~2011-2012~Filius Flitwick Students SLY2301~Hannah Abbott SLY2302~Euan Abercrombie SLY2303~Stewart Ackerley SLY2304~Bertram Aubrey SLY2305~Avery SLY2306~Malcolm Baddock SLY2307~Marcus Belby SLY2308~Katie Bell SLY2309~Sirius Orion Black Grades TRAN~1~2011-2012~SLY2301~AB TRAN~1~2011-2012~SLY2302~B TRAN~1~2011-2012~SLY2303~B TRAN~1~2011-2012~SLY2305~A TRAN~1~2011-2012~SLY2306~BC TRAN~1~2011-2012~SLY2308~A TRAN~1~2011-2012~SLY2309~AB CHAR~1~2011-2012~SLY2301~A CHAR~1~2011-2012~SLY2302~BC CHAR~1~2011-2012~SLY2303~B CHAR~1~2011-2012~SLY2305~BC CHAR~1~2011-2012~SLY2306~C CHAR~1~2011-2012~SLY2307~B CHAR~1~2011-2012~SLY2308~AB EndOfInput
Output
def Gvalue(code):
if code=="A":
return(10)
if code=="AB":
return(9)
if code=="B":
return(8)
if code=="BC":
return(7)
if code=="C":
return(6)
if code=="CD":
return(5)
if code=="D":
return(4)
ROLL_GRADEsum={}
Roll_course_count={}
Roll_name={}
type_course=input()
enter_course_detail=input()
next_input=input()
while(next_input!="Students"):
next_input=input()
roll,name=input().split('~')
Roll_name[roll]=name
ROLL_GRADEsum[roll]=0
Roll_course_count[roll]=0
next_input=input()
while('~' in next_input):
roll,name=next_input.split('~')
Roll_name[roll]=name
ROLL_GRADEsum[roll]=0
Roll_course_count[roll]=0
next_input=input()
code,sem,year,Rnum,grade=input().split('~')
if Rnum in ROLL_GRADEsum.keys():
ROLL_GRADEsum[Rnum]=ROLL_GRADEsum[Rnum]+Gvalue(grade)
Roll_course_count[Rnum]=Roll_course_count[Rnum]+1
next_input=input()
while(next_input!="EndOfInput"):
code,sem,year,Rnum,grade=next_input.split('~')
if Rnum in ROLL_GRADEsum.keys():
ROLL_GRADEsum[Rnum]=ROLL_GRADEsum[Rnum]+Gvalue(grade)
Roll_course_count[Rnum]=Roll_course_count[Rnum]+1
next_input=input()
Sort_roll=sorted(Roll_name)
for key in Sort_roll:
if ROLL_GRADEsum[key]!=0:
ans=round((ROLL_GRADEsum[key]/Roll_course_count[key]),2)
print(key+"~"+Roll_name[key]+"~"+str(ans))
else:
print(key+"~"+Roll_name[key]+"~"+"0")
Comments
Post a Comment