Sorting a list of names by greatest lexicographical order
You are using the sorted function's key parameter in a very odd way. As you have a function that takes a string and returns a value to sort on, you could implement this much more neatly as:

def answer(names):
    return sorted(names, key=value, reverse=True)


See this Python wiki article for more on sorting. In use:

&gt;&gt;&gt; sorted(["annie", "bonnie", "liz"], key=value, reverse=True)
['bonnie', 'liz', 'annie']
&gt;&gt;&gt; sorted(["abcdefg", "vi"], key=value, reverse=True)
['vi', 'abcdefg']


Note that this doesn't meet the requirements for breaking ties, though; as value('al') == value('cj') and sorted is stable, they stay in the input order:

&gt;&gt;&gt; sorted(('cj', 'al'), key=value, reverse=True)
['cj', 'al']  # ok!
&gt;&gt;&gt; sorted(('al', 'cj'), key=value, reverse=True)
['al', 'cj']  # oh...


Your current pre-sort fixes this, and could be incorporated here too:

&gt;&gt;&gt; sorted(sorted(('al', 'cj'), reverse=True), key=value, reverse=True)
['cj', 'al']


To get around this without overcomplicating the code, value can return a tuple (score, string), so the string is used to break ties:

def value(name):
    """Evaluate and return value of the name."""
    return sum([ord(letter) - 96 for letter in name]), name
                                                   # ^ note


Now 'cj' is always preferred:

&gt;&gt;&gt; sorted(('al', 'cj'), key=value, reverse=True)
['cj', 'al']
&gt;&gt;&gt; sorted(('cj', 'al'), key=value, reverse=True)
['cj', 'al']




Beyond that, note that you should use docstrings rather than just comments:

def value(name):
    """Evaluate and return value of the name."""
    return sum([ord(letter) - 96 for letter in name])


Otherwise it looks pretty good: the code is well laid out, and follows the style guide. If anything, I'd say you have too many comments; they shouldn't explain things the reader could learn from the code, but why the code is written that way (if this is obvious, no comment is needed).