Football Elo Rankings
In play_match, the Club class should be responsible for updating its own score. You could define an update_points method taking the same parameter as the computes_point one (and calling it). Also, shouldn't compute_points be responsible for the conversion to int ?

I find it a bit awkward to have the __eq__ and the __gt__ base their logic on completely different fields.

In a club_index : as a general rule, you do not iterate that way over object in Python.
The pythonic way to write

def club_index(club_to_find, clubs):
    index = 0
    while index &lt; len(clubs):
        club = clubs[index]
        if club.name == club_to_find:
            return i
        index += 1
    return -1


is

def club_index(club_to_find, clubs):
    for i,club in enumerate(clubs)
        if club.name == club_to_find:
            return index
    return -1


Now, if I was to write such a program, I wouldn't even create a class ( you can have a look at http://www.youtube.com/watch?v=o9pEzgHorH0 ). A dictionnary to map club names to score is pretty much everything you need but that's a different way to see the problem I guess.

Edit : Actual tested code added.

def get_new_scores(home_score,away_score,result):
    rating_diff = home_score - away_score + 100
    home_expected = 1 / (1 + 10**(-rating_diff/400))
    away_expected = 1 / (1 + 10**(+rating_diff/400))
    home_return = int(32 * ((result  )-home_expected))
    away_return = int(32 * ((1-result)-away_expected))
    return home_score+home_return,away_score+away_return

def main():
    with open("club.txt") as file:
        matches = file.readlines()

    clubs = dict()
    for match in matches:
        (home_str, away_str, result) = match.split(" ")
        clubs[home_str],clubs[away_str] = get_new_scores(clubs.setdefault(home_str,1000), clubs.setdefault(away_str,1000), float(result))

    for club in sorted(clubs, key=clubs.get, reverse=True):
        print(club + ": " + str(clubs[club]) + "\n")

if __name__ == "__main__":
    main()