Unit 8

Source Code

import counter
import bankaccount
import collegecourse

def main():
    done = False
    print("Main Function")
    while not done:
        print("Menu")
        print("E1 - Example 1")
        print("E2 - Example 2")
        print("E3 - Example 3")
        print("E4 - Example 4")
        choice = input("Choice: ").upper()
        match choice:
            case "E1":
                example1()
            case "E2":
                example2()
            case "E3":
                example3()
            case "E4":
                example4()
            case "Q":
                print("Quitting!")
                done = True
            case _:
                print("Invalid, try again!")

# define Example 1 Function
def example1():
    print("Example 1")
    # create counter object
    tally = counter.Counter()
    # call the click method on the object
    tally.click()
    tally.click()
    # print tally
    print(tally)
    # call the reset method on the object
    tally.reset()
    # print tally
    print(tally)
    print(repr(tally))

# define Example 2 Function
def example2():
    print("Example 2")
    c1 = counter.Counter()
    c2 = counter.Counter()
    for i in range(3):
        c1.click()
    for i in range(5):
        c2.click()
    print(c1)
    print(c2)

# define Example 3 Function
def example3():
    print("Example 3")
    sam = bankaccount.BankAccount("Sam", 1000)
    print(sam.get_balance())

    # Accessing the private attribute via name mangling
    print(sam._BankAccount__balance)

    # Modifying the private attribute via name mangling
    sam._BankAccount__balance = 2000
    print(sam.get_balance())

    print(sam)
    print(repr(sam))

# define Example 4 Function
def example4():
    print("Example 4")
    # Example of usage:
    semester = input("Semester: ")
    course_number = input("Course Number: ")
    course_name = input("Course Name: ")
    course_instructor = input("Instructor: ")
    course_daytime = input("Course Day/Time: ")
    cps3320 = collegecourse.CollegeCourse(semester, course_number, course_name, course_instructor, course_daytime)
    for x in range(3):
        assignment = input("Name of Assignment: ")
        grade = input("Grade: ")
        cps3320.add_grade(assignment, grade)

    print(cps3320)
    print(repr(cps3320))

main()

counter.py

# header
class Counter:
    # constructor
    def __init__(self):
        # initialize attribute
        self.count = 0

    # methods
    def click(self):
        self.count = self.count + 1

    def reset(self):
        self.count = 0

    # __str__ method
    def __str__(self):
        return "Current count: " + str(self.count)

    # __repr__ method
    def __repr__(self):
        return f"count={self.count}"

bankaccount.py

# header
class BankAccount:
    # constructor
    def __init__(self, name, initial_balance):
        self.name = name
        self.__balance = initial_balance

    # methods
    def deposit(self, amount):
        self.__balance += amount

    def get_balance(self):
        return self.__balance

    def __str__(self):
        output = "Name: " + self.name + "\n"
        output += "Balance: $" + str(self.get_balance())
        return output

    def __repr__(self):
        return f"name='{self.name}', initial_balance={self.get_balance()}"

collegecourse.py

class CollegeCourse:
    def __init__(self, semester, course_number, course_name, instructor, time):
        self.semester = semester
        self.course_number = course_number
        self.course_name = course_name
        self.instructor = instructor
        self.time = time
        self.grades = {}  # Dictionary to store grades with assignment names as keys

    def add_grade(self, assignment_name, grade):
        self.grades[assignment_name] = grade

    def __str__(self):
        """Returns a user-friendly string representation of the CollegeClass object."""
        grade_list = "\n".join([f"  {assignment}: {grade}" for assignment, grade in self.grades.items()])
        return (f"Semester: {self.semester}\n"
                f"Course Number: {self.course_number}\n"
                f"Course Name: {self.course_name}\n"
                f"Instructor: {self.instructor}\n"
                f"Time: {self.time}\n"
                f"Grades:\n{grade_list}")

    def __repr__(self):
        """Returns a formal string representation of the CollegeClass object, useful for debugging."""
        return (f"CollegeCourse(semester='{self.semester}', course_number='{self.course_number}', "
                f"course_name='{self.course_name}', instructor='{self.instructor}', time='{self.time}', "
                f"grades={self.grades})")

Last updated