Skip to main content

Command Palette

Search for a command to run...

Solving CS50P - Problem Set 8

Published
•2 min read•View as Markdown

In this Problem Set we delve into the world of Object-Oriented Programming (OOP) and explore the concept of classes. Classes are a way in which we can create our own type of data and give them names.

ℹ
Disclaimer: The following code solutions are for educational purposes only and are not intended to be used or submitted as your own. Cheating is a violation of the Academic Honesty of the course. All problem sets presented are owned by Harvard University.

Seasons of Love

from datetime import date
import sys
import inflect

p = inflect.engine()

def main():
    today = date.today()
    birthday = input("Date: ")
    birthday = get_bday(birthday)
    print(get_time(today, birthday))

def get_time(now, then):
    time = abs(now - then)
    t = time.days
    t = int(t) * 24 * 60
    words = p.number_to_words(t, andword="")
    return f"{words.capitalize()} minutes"


def get_bday(b):
    try:
        birthday = date.fromisoformat(b)
    except:
        sys.exit("Invalid date")
    else:
        return birthday



if __name__ == "__main__":
    main()
import pytest
from datetime import date
from seasons import get_bday

def main():
    test_get()

def test_get():
    assert get_bday("2001-01-01") == date(2001, 1, 1)
    assert get_bday("2001-09-30") == date(2001, 9, 30)



if __name__ == "__main__":
    main()
import sys

class Jar:
    def __init__(self, capacity=12):
        if capacity < 0:
            raise ValueError("Capacity less than 0")
        self._capacity = capacity
        self._size = 0

    def __str__(self):
        return "🍪" * self.size

    def deposit(self, n):
        if n > self.capacity:
            raise ValueError("Capacity exceeded")
        if self.size + n > self.capacity:
            raise ValueError("Capacity exceeded")
        self._size += n


    def withdraw(self, n):
        if n > self.size:
            raise ValueError("Insufficient cookies")
        self._size -= n


    @property
    def capacity(self):
        return self._capacity

    @property
    def size(self):
        return self._size
from jar import Jar
import pytest

def test_init():
    jar = Jar()
    assert jar.capacity == 12
    jar = Jar(3)
    assert jar.capacity == 3

def test_str():
    jar = Jar()
    assert str(jar) == ""
    jar.deposit(1)
    assert str(jar) == "🍪"
    jar.deposit(11)
    assert str(jar) == "🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪"


def test_deposit():
    jar = Jar()
    jar.deposit(6)
    assert jar.size == 6
    jar.deposit(6)
    assert jar.size == 12


def test_withdraw():
    jar = Jar()
    jar.deposit(6)
    jar.withdraw(3)
    assert jar.size == 3
    jar.withdraw(1)
    assert jar.size == 2

if __name__ == "__main__":
    main()

CS50 Shirtificate

from fpdf import FPDF

class PDF():
    def __init__(self, name):
        self._pdf = FPDF()
        self._pdf.add_page()
        self._pdf.set_font("helvetica", "B", 45)
        self._pdf.cell(0, 60, "CS50 Shirtificate", new_x="LMARGIN", new_y="NEXT", align= "c")
        self._pdf.image("shirtificate.png", w=self._pdf.epw)
        self._pdf.set_font_size(32)
        self._pdf.set_text_color(255, 255, 255)
        self._pdf.text(x=40, y=135, text=f"{name} took CS50")

    def save(self, name):
        self._pdf.output(name)

name = input("Insert Name: ")
pdf = PDF(name)
pdf.save("shirtificate.pdf")