Question

PYTHON 3 Object Oriented ProgrammingQuestion 3 (15 points): Purpose: To do a bit of Object Oriented Programming. Degree of Difficulty: Moderate. The only problem

***a9q3.py file below***

class GradeItem(object):
    # A Grade Item is anything a course uses in a grading scheme,
    # like a test or an assignment.  It has a score, which is assessed by
    # an instructor, and a maximum value, set by the instructor, and a weight,
    # which defines how much the item counts towards a final grade.

    def __init__(self, weight, scored=None, out_of=None):
        """
        Purpose:
            Initialize the GradeItem object.
        Preconditions:
            :param weight: the weight of the GradeItem in a grading scheme
            :param scored: the scored obtained in the grade item
            :param out_of: the maximum possible score for the grade item
        """
        self.weight = weight
        self.scored = scored
        self.out_of = out_of

    def __str__(self):
        """
        Purpose:
            Represent the Grade object as a string.
            If the item has not been assessed yet, N/A is used.
            This function gets called by str().
        Return:
            A string representation of the Grade.
        """
        if self.scored is None or self.out_of is None:
            return 'N/A'
        else:
            return str(self.scored) + '/' + str(self.out_of)

    def record_outcome(self, n, d):
        """
        Purpose:
            Record the outcome of the GradeItem.
        Preconditions:
            :param n: The score obtained on the item
            :param d: The maximum score on the item
        Post-conditions:
            Changes the data stored in the GradeItem
        Return:  None
        """
        self.scored = n
        self.out_of = d

    def contribution(self):
        """
        Purpose:
            Calculate and return the contribution this GradeItem makes
            to a grading scheme.  If the item has not been assessed,
            a value of zero is returned.
        Return:
            The weighted contribution of the GradeItem.
        """
        if self.scored is None or self.out_of is None:
            return 0
        else:
            return self.weight * self.scored / self.out_of


class StudentRecord(object):
    def __init__(self, first, last, st_number):
        """
        Purpose:  Initialize the Student object.
        Preconditions:
            :param first: The student's first name, as a string
            :param last: The student's last name, as a string
            :param st_number: The student's id number, as a string
        """
        self.first_name = first
        self.last_name = last
        self.id = st_number
        self.midterm = None
        self.labs = []


    def drop_lowest(self, grades):
        """
        Purpose:
            Sets the weight of the lowest grade in grades to zero.
        Pre-conditions:
            :param grades: a list of GradeItems
        Post-conditions:
            One of the grade items has its weight set to zero
        Return:
            :return: None
        """
        pass


    def calculate(self):
        """
        Purpose:
            Calculate the final grade in the course.
        Return:
            The final grade.
        """
        return round(self.midterm.contribution()
                     + sum([b.contribution() for b in self.labs]))

    def display(self):
        """
        Purpose:
            Display the information about the student, including
            all lab and assignment grades, and the calculation of the total grade.
        :return:
        """
        print("Student:", self.first_name, self.last_name, 
              '(' + self.id + ')')
        print("\tCourse grade:", self.calculate())
        print('\tMidterm:', str(self.midterm))
        #

        print('\tLabs:', end=" ")
        for g in self.labs:
            if g.weight == 0:
                print('[' + str(g) + ']', end=' ')
            else:
                print(str(g), end=' ')
        print()


def read_student_record_file(filename):
    """
    Purpose:
        Read a student record file, containing information about the student.
        Line 1: Out of: the maximum score for the grade items
        Line 2: Weight: the weight of the grade items in the grading scheme
        Lines 3...: Student records as follows:
            Student Number, Lastname, Firstname, 10 lab marks, 10 assignment marks, midterm, final
    Pre-conditions:
        :param filename: A text file, comma-separated, with the above format.
    Return:
        :return: A list of StudentRecords constructed from the named file.
    """
    f = open(filename)

    # Second line tells us what the grade items are out of
    out_of_line = f.readline().rstrip().split(',')
    out_of = [int(i) for i in out_of_line[1:]]
    lab_out_of = out_of[0:10]
    assignments_out_of = out_of[10:20]
    mt_out_of = out_of[20]
    final_out_of = out_of[21]

     # Third line tells us the weight of each item
    weight_line = f.readline().rstrip().split(',')
    weights = [int(i) for i in weight_line[1:]]
    lab_weights = weights[0:10]
    assignment_weights = weights[10:20]
    mt_weight = weights[20]
    final_weight = weights[21]

    # Read all the students in the file:
    students = list()
    for line in f:
        student_line = line.rstrip().split(',')
        student = StudentRecord(student_line[2],student_line[1],student_line[0])
        labs = [int(lab) for lab in student_line[3:13]]
        assignments = [int(a) for a in student_line[13:23]]

        for g,o,w in zip(labs,lab_out_of,lab_weights):
            student.labs.append(GradeItem(w,g,o))

        student.midterm = GradeItem(mt_weight,int(student_line[23]),mt_out_of)

        students.append(student)

    return students

if __name__ == '__main__':
    course = read_student_record_file('students.txt')

    # display the students
    print('------------- Before ---------------')
    for s in course:
        s.display()

    # drop lowest lab for all students
    for s in course:
        s.drop_lowest(s.labs)

    # display the students
    print('------------- After ----------------')
    for s in course:
        s.display()

***Students.txt file below***

Out of,4,4,4,4,4,4,4,4,4,4,41,50,35,60,70,55,45,50,60,60,60,90
Weights,1,1,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,10,40
3111332,Einstein,Albert,4,4,3,4,4,3,4,3,3,4,39,46,34,58,65,45,25,10,40,35,35,50
3216842,Curie,Marie,3,4,3,4,3,4,1,4,1,4,41,45,30,50,61,48,37,43,55,58,55,85

*The solution code returns 78.5 of avg when the lowest grades are NOT dropped from the student.txt file. On the other hand, if they ARE dropped for BOTH labs and assignments, the avg becomes 80.5

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

class GradeItem(object):

               # A Grade Item is anything a course uses in a grading scheme,

               # like a test or an assignment. It has a score, which is assessed by

               # an instructor, and a maximum value, set by the instructor, and a weight,

               # which defines how much the item counts towards a final grade.

              

               def __init__(self, weight, scored=None, out_of=None):

                              """

                              Purpose

                                             Initialize the GradeItem object.

                              Preconditions:

                                             :param weight: the weight of the GradeItem in a grading scheme

                                             :param scored: the scored obtained in the grade item

                                             :param out_of: the maximum possible score for the grade item

                              """

                              self.weight = weight

                              self.scored = scored

                              self.out_of = out_of       

                             

               def __str__(self):

                              """

                              Purpose:

            Represent the Grade object as a string.

            If the item has not been assessed yet, N/A is used.

            This function gets called by str().

                              Return:

            A string representation of the Grade.

                              """

                              if self.scored is None or self.out_of is None:

                                             return 'N/A'

                              else:

                                             return str(self.scored) + '/' + str(self.out_of)

                                            

              

               def record_outcome(self, n, d):

                              """

                              Purpose:

            Record the outcome of the GradeItem.

        Preconditions:

            :param n: The score obtained on the item

            :param d: The maximum score on the item

        Post-conditions:

            Changes the data stored in the GradeItem

        Return: None

                              """

                             

                              self.scored = n

                              self.out_of = d

                             

                             

               def contribution(self):

                              """

                              Purpose:

            Calculate and return the contribution this GradeItem makes

            to a grading scheme. If the item has not been assessed,

            a value of zero is returned.

        Return:

            The weighted contribution of the GradeItem.

                              """

                              if self.scored is None or self.out_of is None:

                                             return 0

                              else:

                                             return self.weight * self.scored / self.out_of

                                            

                                            

class StudentRecord(object):

               def __init__(self, first, last, st_number):

                              """

                              Purpose: Initialize the Student object.

                              Preconditions:

            :param first: The student's first name, as a string

            :param last: The student's last name, as a string

            :param st_number: The student's id number, as a string

                              """

                             

                              self.first_name = first

                              self.last_name = last

                              self.id = st_number

                              self.midterm = None

                              self.labs = []

                              self.final_exam = None

                              self.assignments = []

                             

            def drop_lowest(self, grades):

                        """

                        Purpose:

            Sets the weight of the lowest grade in grades to zero.

        Pre-conditions:

            :param grades: a list of GradeItems

        Post-conditions:

            One of the grade items has its weight set to zero

        Return:

            :return: None

                        """

                       

                        if(len(grades) > 0):

                                    minIndex = 0

                                    totalWeight = sum([g.weight for g in grades]) # calculate the total weight

                                    # loop to get the minimum scored grade

                                    for i in range(1,len(grades)):

                                                if grades[i].scored < grades[minIndex].scored:

                                                            minIndex = i

                                                           

                                    grades[minIndex].weight = 0            

                                    newWeight = (float(totalWeight))/(len(grades)-1) # calculate the new weight after removing the lowest grade

                                   

                                    # loop to redistribute the weights

                                    for i in range(1,len(grades)):

                                                if i != minIndex:

                                                            grades[i].weight= newWeight                             

                             

               def calculate(self):

                              """

                              Purpose:

            Calculate the final grade in the course.

        Return:

            The final grade.

                              """

                             

                              return round(self.midterm.contribution()

                     + sum([b.contribution() for b in self.labs]) + self.final_exam.contribution() + sum([a.contribution() for a in self.assignments]))

                                                                          

               def display(self):

                              """

                              Purpose:

            Display the information about the student, including

            all lab and assignment grades, and the calculation of the total grade.

        :return:

                              """

                              print("Student:", self.first_name, self.last_name,'(' + self.id + ')')

                              print("\tCourse grade:", self.calculate())

                              print('\tMidterm:', str(self.midterm))

                             

                              print('\tLabs:', end=" ")

                             

                              for g in self.labs:

                                             if g.weight == 0:

                                                            print('[' + str(g) + ']', end=' ')

                                             else:

                                                            print(str(g), end=' ')

                              print()

                             

                              print('\tAssignments : '),

                              for g in self.assignments:

                                             if g.weight == 0:

                                                            print('[' + str(g) + ']', end=' ')

                                             else:

                                                            print(str(g), end=' ')

                              print()

                              print('\tFinal Exam : ',str(self.final_exam))

                                                           

def read_student_record_file(filename):

               """

               Purpose:

        Read a student record file, containing information about the student.

        Line 1: Out of: the maximum score for the grade items

        Line 2: Weight: the weight of the grade items in the grading scheme

        Lines 3...: Student records as follows:

            Student Number, Lastname, Firstname, 10 lab marks, 10 assignment marks, midterm, final

    Pre-conditions:

        :param filename: A text file, comma-separated, with the above format.

    Return:

        :return: A list of StudentRecords constructed from the named file.

               """

               f = open(filename)

    # First line tells us what the grade items are out of

               out_of_line = f.readline().rstrip().split(',')

               out_of = [int(i) for i in out_of_line[1:]]

               lab_out_of = out_of[0:10]

               assignments_out_of = out_of[10:20]

               mt_out_of = out_of[20]

               final_out_of = out_of[21]

              

               # Second line tells us the weight of each item

               weight_line = f.readline().rstrip().split(',')

               weights = [int(i) for i in weight_line[1:]]

               lab_weights = weights[0:10]

               assignment_weights = weights[10:20]

               mt_weight = weights[20]

               final_weight = weights[21]

              

               # Read all the students in the file:

              

               students = list()

               for line in f:

                              student_line = line.rstrip().split(',')

                              student = StudentRecord(student_line[2],student_line[1],student_line[0])

                              labs = [int(lab) for lab in student_line[3:13]]

                              assignments = [int(a) for a in student_line[13:23]]

                             

                              for g,o,w in zip(labs,lab_out_of,lab_weights):

                                             student.labs.append(GradeItem(w,g,o))

                             

                              for g,o,w in zip(assignments,assignments_out_of,assignment_weights):

                                             student.assignments.append(GradeItem(w,g,o))

                                            

                              student.midterm = GradeItem(mt_weight,int(student_line[23]),mt_out_of)

                             

                              student.final_exam = GradeItem(final_weight,int(student_line[24]),final_out_of)

                             

                              students.append(student)

                             

               return students

              

if __name__ == '__main__':

              

               course = read_student_record_file('students.txt')

               # display the students

              

               print('------------- Before ---------------')

               for s in course:

                              s.display()

              

               #calculate class average

               total = 0

               for s in course:

                              total += s.calculate()

               avg = total/len(course)   

               print('Average : '+str(avg))            

               # drop lowest lab and lowest assignment for all students

               for s in course:

                              s.drop_lowest(s.labs)

                              s.drop_lowest(s.assignments)

              

               # display the students

               print('------------- After ----------------')

               for s in course:

                              s.display()

                             

               #calculate class average

               total = 0

               for s in course:

                              total += s.calculate()

               avg = total/len(course)   

               print('Average : '+str(avg))            

#end of program             

Code Screenshot:

çclass GradeItem (object): # A Grade Item is anything a course uses in a grading scheme, # like a test or an assignment. It hdef record_outcome (self, n, d): 11111 Purpose: Record the outcome of the GradeItem. Preconditions: :param n: The score obtai68 ID OOS OM class StudentRecord (object): def_init__(self, first, last, st_number): Purpose: Initialize the Student object.def calculate (self): Purpose: Calculate the final grade in the course. Return: The final grade. return round(self.midterm.coEidef read_student_record_file(filename): 154 155 156 157 158 159 160 161 Purpose: Read a student record file, containing inf194 195 196 for g,o,w in zip (assignments, assignments_out_of, assignment_weights): student.assignments.append(GradeItem (w,9

Add a comment
Know the answer?
Add Answer to:
PYTHON 3 Object Oriented Programming ***a9q3.py file below*** class GradeItem(object): # A Grade Item is anything...
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
  • Write this code on python 3 only. Suppose class Student represents information about students in a...

    Write this code on python 3 only. Suppose class Student represents information about students in a course. Each student has a name and a list of test scores. The Student class should allow the user to view a student's name, view a test score at a given position, view the highest test score, view the average test score, and obtain a string representation of the student's information. When a Student object is created, the user supplies the student's name and...

  • Finish each function python 3 LList.py class node(object): """ A version of the Node class with...

    Finish each function python 3 LList.py class node(object): """ A version of the Node class with public attributes. This makes the use of node objects a bit more convenient for implementing LList class.    Since there are no setters and getters, we use the attributes directly.    This is safe because the node class is defined in this module. No one else will use this version of the class. ''' def __init__(self, data, next=None): """ Create a new node for...

  • Must be in Python 3 exercise_2.py # Define the Student class class Student():    # Ini...

    Must be in Python 3 exercise_2.py # Define the Student class class Student():    # Initialize the object properties def __init__(self, id, name, mark): # TODO # Print the object as an string def __str__(self): return ' - {}, {}, {}'.format(self.id, self.name, self.mark) # Check if the mark of the input student is greater than the student object # The output is either True or False def is_greater_than(self, another_student): # TODO # Sort the student_list # The output is the sorted...

  • PYTHON. Continues off another code(other code is below). I don't understand this. Someone please help! Comment...

    PYTHON. Continues off another code(other code is below). I don't understand this. Someone please help! Comment the lines please so I can understand. There are short and med files lengths for each the list of names/ids and then search id file. These are the input files: https://codeshare.io/aVQd46 https://codeshare.io/5M3XnR https://codeshare.io/2W684E https://codeshare.io/5RJwZ4 LinkedList ADT to store student records(code is below). Using LinkedList ADT instead of the Python List. You will need to use the Student ADT(code is below) Imports the Student class...

  • PYTHON. Continues off another code. I don't understand this. Someone please help! Comment the lines please...

    PYTHON. Continues off another code. I don't understand this. Someone please help! Comment the lines please so I can understand LinkedList ADT: class myLinkedList:     def __init__(self):         self.__head = None         self.__tail = None         self.__size = 0     def insert(self, i, data):         if self.isEmpty():             self.__head = listNode(data)             self.__tail = self.__head         elif i <= 0:             self.__head = listNode(data, self.__head)         elif i >= self.__size:             self.__tail.setNext(listNode(data))             self.__tail = self.__tail.getNext()         else:             current = self.__getIthNode(i - 1)             current.setNext(listNode(data,...

  • Python3 programming help needed LAB*: Program: Online shopping cart (continued) Need the below code edited to...

    Python3 programming help needed LAB*: Program: Online shopping cart (continued) Need the below code edited to run properly for the lab.. class ItemPurchase:     def __init__(self, nameitem='none', item_prc=0, item_quntity=0, item_descrp = 'none'):         self.nameitem = nameitem         self.item_prc = item_prc         self.item_quntity = item_quntity         self.item_descrp = item_descrp     def print_itemvaluecost(self):              string = '{} {} @ ${} = ${}'.format(self.nameitem, self.item_quntity, self.item_prc(self.item_quntity * self.item_prc))         valuecost = self.item_quntity * self.item_prc         return string, valuecost     def print_itemdescription(self):         string...

  • Python3 programming help needed LAB*: Program: Online shopping cart (continued) Need the below code edited to run prope...

    Python3 programming help needed LAB*: Program: Online shopping cart (continued) Need the below code edited to run properly for the lab.. class ItemPurchase:     def __init__(self, nameitem='none', item_prc=0, item_quntity=0, item_descrp = 'none'):         self.nameitem = nameitem         self.item_prc = item_prc         self.item_quntity = item_quntity         self.item_descrp = item_descrp     def print_itemvaluecost(self):              string = '{} {} @ ${} = ${}'.format(self.nameitem, self.item_quntity, self.item_prc(self.item_quntity * self.item_prc))         valuecost = self.item_quntity * self.item_prc         return string, valuecost     def print_itemdescription(self):         string = '{}: {}'.format(self.nameitem, self.item_descrp)         print(string , end='\n')         return string class Shopping_Cart:     #Parameter...

  • I'm trying to sort a list of students from a text file in python(3.7) with three separate sorting functions (Bubble, selection, insert) I'm not sure to why as its not working I'm going to...

    I'm trying to sort a list of students from a text file in python(3.7) with three separate sorting functions (Bubble, selection, insert) I'm not sure to why as its not working I'm going to guess its because I'm not using the swap function I built. Every time I run it though I get an error that says the following Traceback (most recent call last): File "C:/Users/tkoto/Desktop/SearchAndSortLab.py", line 146, in <module> main() File "C:/Users/tkoto/Desktop/SearchAndSortLab.py", line 122, in main studentArray.gpaSort() File "C:/Users/tkoto/Desktop/SearchAndSortLab.py",...

  • Use of search structures! how can i make this program in python? Learning Objectives: You should...

    Use of search structures! how can i make this program in python? Learning Objectives: You should consider and program an example of using search structures where you will evaluate search trees against hash tables. Given the three text files under containing the following: - A list of students (classes Student in the distributed code) - A list of marks obtained by the students (classes Exam results in the distributed code) - A list of topics (classes Subject in the distributed...

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