Python – Defining Classes and Methods with Python – LiveCoding Video

Today I have decided to check whether I can pass the first homework from SoftUni OOP with Python, through a live coding session. I have not read the problem before the video, thus I may say it took me exactly 18 minutes to solve it live (probably would have taken me around 10, if I was not talking during the video). Still, it is an interesting problem, if you are starting with OOP, so I have decided to put it here as well:

Defining Classes and Methods with Python

This is how the problem was given:

Create a class called Programmer. Upon initialization it should receive name (string), language (string), skills (integer). The class should have two methods:

  • watch_course(course_name, language, skills_earned)
    • If the programmer’s language is the equal to the one on the course increase his skills with the given one and return a message “{programmer} watched {course_name}”.
    • Otherwise return “{name} does not know {language}”.
  • change_language(new_language, skills_needed)
    • If the programmer has the skills and the language is different from his, change his language to the new one and return “{name} switched from {previous_language} to {new_language}”.
    • If the programmer has the skills, but the language is the same as his return “{name} already knows {language}”.
    • In the last case the programmer does not have the skills, so return “{name} needs {needed_skills} more skills” and don’t change his language

This is my solution, from the video:

class Programmer:
    def __init__(self, name, language, skills):
        self.name = name
        self.language = language
        self.skills = skills

    def watch_course(self, course_name, language, skills_earned):
        if self.language == language:
            self.skills += skills_earned
            return f'{self.name} watched {course_name}'
        else:
            return f'{self.name} does not know {language}'

    def change_language(self, new_language, skills_needed):
        if self.skills >= skills_needed:
            if new_language == self.language:
                return f'{self.name} already knows {new_language}'
            else:
                previous_language = self.language
                self.language = new_language
                return f'{self.name} switched from {previous_language} to {new_language}'
        else:
            needed_skill = skills_needed - self.skills
            return f'{self.name} needs {needed_skill} more skills'

programmer = Programmer("John", "Java", 50)
print(programmer.watch_course("Python Masterclass", "Python", 84))
print(programmer.change_language("Java", 30))
print(programmer.change_language("Python", 100))
print(programmer.watch_course("Java: zero to hero", "Java", 50))
print(programmer.change_language("Python", 100))
print(programmer.watch_course("Python Masterclass", "Python", 84))

I hope you enjoyed it! 🙂