Pull Request2

This is a great set of solutions. I would like to have seen everything in one loop, as follows, because it reduces overall duplication of effort and performs much more quickly. By processing the loop 3 times you've tripled the resource costs and made it more difficult to read and understand. Full credit either way, but do consider the implementation below:

    TOTAL_WORDS = float(len(data.SHAKESPEARE.split()))
    LINES = 0
    MINIMUM_WORDS = None
    MAXIMUM_WORDS = 0
    NUM_CRISPIAN = 0
    for line in data.SHAKESPEARE.split('\n'):
        LINES += 1

        WORDS = len(line.split())

        if WORDS > MAXIMUM_WORDS:
            MAXIMUM_WORDS = WORDS

        if WORDS < MINIMUM_WORDS or MINIMUM_WORDS is None:
            MINIMUM_WORDS = WORDS

        if 'Crispian' in line:
            NUM_CRISPIAN += 1

    AVERAGE_WORDS = TOTAL_WORDS / LINES