Python Libraries Mentioned in CS50P

This is a list of some Python libraries mentioned in CS50P 2022.

WEEK 4: Libraries

random

See Random

Ex.

1
2
3
4
5
6
7
8
9
10
11
12
import random

coin = random.choice(["heads", "tails"])
print(coin)

number = random.randint(1, 10)
print(number)

cards = ["jack", "queen", "king"]
random.shuffle(cards)
for card in cards:
print(card)

statistics

See Statistics

Ex.

The mean function takes a list of values and print the average of these values.

1
2
3
import statistics

print(statistics.mean([100, 90]))

sys

See Command-Line Arguments

cowsay

This library generates ascii arts like this:

1
2
3
4
5
6
7
8
9
10
11
12
  ___________
< Hello World >
===========
\
\
^__^
(oo)\_______
(__)\ )\/\
||----w |
|| ||


See Packages

emoji

This library can convert some specified words to emoji. For instance, :thumbsup: can be converted to 👍.

See emojize

Ex.

1
2
3
4
import emoji

words = input("Input: ")
print(f"Output: {emoji.emojize(words)}")

pyfiglet

This library can make large letters out of ordinary text:

1
2
3
4
5
 _ _ _          _   _     _
| (_) | _____ | |_| |__ (_)___
| | | |/ / _ \ | __| '_ \| / __|
| | | < __/ | |_| | | | \__ \
|_|_|_|\_\___| \__|_| |_|_|___/

See Frank, lan and Glen's Letters

inflect

This library can correctly generate plurals, singular nouns, ordinals, indefinite articles; convert numbers to words.

See Adieu, Adieu

requests

See Bitcoin Price Index

pylint

See Style

black

See Style

WEEK 5: Unit Tests

pytest

See Pytest

Ex.1.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# fuel.py
def main():
while True:
fraction = input("Fraction: ")
try:
percentage = convert(fraction)
break
except ValueError:
pass
except ZeroDivisionError:
pass
print(gauge(percentage))


def convert(fraction):
x, y = [int(bit) for bit in fraction.split("/")]
if x > y and y != 0:
raise ValueError
if y == 0:
raise ZeroDivisionError
return int(x / y * 100)

def gauge(percentage):
if percentage <= 1:
return "E"
elif percentage >= 99:
return "F"
else:
return f"{percentage}%"


if __name__ == "__main__":
main()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# test_fuel.py
from fuel import convert, gauge
import pytest

def test_covert():
assert convert("0/4") == 0
assert convert("1/4") == 25
assert convert("3/4") == 75
assert convert("4/4") == 100
with pytest.raises(ValueError):
assert convert("cat/dog")
assert convert("three/four")
assert convert("1.5/3")
assert convert("4/3")
with pytest.raises(ZeroDivisionError):
assert convert("4/0")

def test_guage():
assert gauge(0) == "E"
assert gauge(1) == "E"
assert gauge(25) == "25%"
assert gauge(99) == "F"
assert gauge(100) == "F"

Ex.2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# seasons.py
from datetime import date
import re
import sys
import inflect


DATE_REGEXP = r"^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$"


def main():
date_str = input("Date of Birth: ")
print(get_ans(date_str))


def get_ans(date_str):
if is_valid_date(date_str):
birthday = date.fromisoformat(date_str)
else:
print("Invalid date")
sys.exit(1)
today = date.today()
days = (today - birthday).days
p = inflect.engine()
return (p.number_to_words(days * 24 * 60, andword="")).capitalize() + " minutes"


def is_valid_date(s):
return re.search(DATE_REGEXP, s)


if __name__ == "__main__":
main()
1
2
3
4
5
6
7
8
9
10
11
# test_seasons.py
from seasons import get_ans
import pytest

def test_correctness():
assert get_ans("2022-07-05") == "Five hundred twenty-five thousand, six hundred minutes"
assert get_ans("2021-07-05") == "One million, fifty-one thousand, two hundred minutes"

def test_invalid_input():
with pytest.raises(SystemExit):
get_ans("January 1, 1999")

WEEK 6: File I/O

csv

See csv

pillow

This is a popular Python library that works well with image files.

See Binary Files and PIL

WEEK 7: Regular Expressions

re

See Notes

WEEK 8: Object-Oriented Programming

fpdf2

See CS50 Shirtificate

WEEK 9: Et Cetera

mypy

See Type Hints

argparse

See argparse

pyttsx3

See This was CS50!