W = 7 def p(rows): return [(r + ' '*W)[:W] for r in rows] G = {} # All 5-row, bottom-aligned on baseline (row index 4 = last row = bottom of letters). G['T'] = p([" _ _____","/ / |","/ / |"," |"," "]) G['Y'] = p(["| | ","| | ","\\ / "," /\\ "," / \\ " ]) G['G'] = p([" __ "," / \\ ", "| ", "| __/ ", " \\__ / "]) G['E'] = p(["______ "," /","| ","|__ / ","|______ "]) G['L'] = p(["| ","| ","| ","| ","_ _____ "]) G['S'] = p([" _ __ "," / "," /____ ","\\ / ","\\_ _/ "]) G['J'] = p([" __ "," | "," ____|_ ","| /"," / "]) G['O'] = p([" ___ "," / \\ "," | ", "| ", " \\___/ "]) # O with two dots above (diacritic on a vowel like o) G['OJ'] = p([" . . . "," ___ "," / \\ ","| ", " /\\___/ "]) # F o n s t erp G['F'] = p([" ___ ","/ \\ ","| ","|______ ","| "]) G['N'] = p(["| /\\ | ","| \\| ","|/ \\| ","|/ | "," | "]) G['R'] = p([" ____ ","| / ","| / ","| / ","|/ "]) G['P'] = p([" ___ ","/ \\ ","| \\ ","|______/ ","| "]) G['u'] = p(["/ | / ","| | / ","| | / ","|_ | / ","_ | / "]) # squeegee replacing first T of TYGELSJO SQUEE = p([" ___ "," / \\ "," /__/\\ ","| | "," / / "]) def cell(k, row): return (SQUEE if k == 'SQUEE' else G[k.upper()])[row] def line(keys, row): return ' '.join(cell(k, row) for k in keys) word1 = ['SQUEE','Y','G','E','L','S','J','OJ'] word2 = ['F','OJ','N','S','T','E','R','P','U','T','S'] rows = [] for r in range(5): rows.append(' ' + line(word1, r) + ' ' + line(word2, r)) print('\\n'.join(rows)) print('widths', set(len(x) for x in rows))