Answer
Answer
This is similar to
addGrade except that it accepts a letter grade as a string (instead of a gradepoint). Use the updated
class to improve the GPA calculator by allowing the entry of letter grades.
Answer:
#! /usr/bin/python3
# gpa.py
# Program to take credits and grades and return calculated GPA
class Student:
def __init__(self, hours, qpoints, credits):
self.hours = float(hours)
self.qpoints = float(qpoints)
def getName(self):
return self.name
def getHours(self):
return self.hours
def getQPoints(self):
return self.qpoints
def gpa(self):
return self.qpoints/self.hours
def main():
grade = input('Enter grade for next course, or type done finish: ')
credits = input('Enter number of credit hours for this course: ')
error_float = 'error: expected a floating-point number'
# make a new Student object
# students = Student('students', 0.0, 0.0) # This is wrong declaration because you initialised "def
__init__(self, hours, qpoints, credits): "
students = Student(0.0, 0.0, 0.0)
# user-feedback loop
while 1:
# prompt user to enter a grade
grade_str = input(grade)
# quit if no grade is entered
if grade_str.strip() == 'done':
break
try:
# convert input to a floating-point value
grade = float(grade_str)
except ValueError:
# if input cannot be converted, restart feedback loop
print(error_float)
continue
# after user has entered all grades, compute the cumulative GPA
if students.getHours() == 0.0:
# can't compute GPA if hours = 0
print('*** zero credit hours recorded')
else:
# otherwise, output cumulative GPA and finish
print('*** final GPA =', students.gpa())
if __name__ == '__main__':
main()
2. Write a modified Button class that creates circular buttons. Call your class CButton and
implement the exact same methods that are in the existing Button class. Your constructor should
take the center of the button and its radius as normal parameters. Place your class in a module
called cbutton.py. Test your class by modifying roller.py to use your buttons.
Answer: