Solving CS50P - Problem Set 8
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.
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()
Cookie Jar
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")