I was invited to do a fun task by my office colleague, Hazel Anderson. She researches synesthesia, and she wanted to induce grapheme-color synesthesia by having participants learn pi using digit-color mapping as one available strategy. So she needed something that could a Word document with pi with an arbitrary number of decimal places. Approximately 40 minutes of the pure joy of structured procrastination and:

Here’s the python script to generate this beauty:
# Settings here
DIGITS = 5000 # Number of decimal places to print
BLOCK_SIZE = 4 # Number of digits between spaces
BLOCK_SPACING = 4 # Size of space between blocks
GRAPHEME_COLOR_MAPPING = { # Type in your digit-color mapping
'0': (128, 128, 255),
'1': (255, 0, 255),
'2': (128, 0, 255),
'3': (0, 128, 255),
'4': (0, 255, 255),
'5': (255, 255, 0),
'6': (100, 255, 0),
'7': (0, 0, 0),
'8': (70, 255, 70),
'9': (255, 128, 128)
}
# Set up document
from docx import Document
from docx.shared import RGBColor
document = Document()
paragraph = document.add_paragraph('') # Start with an empty text
# Create Pi
from mpmath import mp
mp.dps = DIGITS # Set number of decimals
pi = str(mp.pi)[2:] # Get all decimals as (iterable) string
# Add digits to Word document
for i, digit in enumerate(pi):
# Add spacing between blocks
if i % BLOCK_SIZE == 0 and i > 0:
paragraph.add_run(' ' * BLOCK_SPACING)
# Add colored digit
run = paragraph.add_run(digit)
run.font.color.rgb = RGBColor(*GRAPHEME_COLOR_MAPPING[digit])
# Save it!
document.save('pi in colors.docx')