This line, as well as being unwieldy (use some line breaks!) restricts this program to English scrabble: > letter_val = {" ": 0, "A": 1, "B": 3, "C": 3, "D": 2, "E": 1, "F": 4, "G": 2, "H": 4, "I": 1, "J": 8, "K": 5, "L": 1, "M": 3, "N": 1, "O": 1, "P": 3, "Q": 10, "R": 1, "S": 1, "T": 1, "U": 1, "V": 4, "W": 4, "X": 8, "Y": 4, "Z": 10} If you want to be useful to all players of the game, it would be worth loading the points values from a config file. The current code is going to have problems in languages where not all tiles are single letters (e.g. <kbd>DD₁</kbd> or <kbd>LL₅</kbd> in a Welsh set). It also doesn't handle words that span more than one double-word or triple-word square, or claiming the 50-point bonus for playing all tiles.