Computing win/loss records in Python

Steven D'Aprano steve+comp.lang.python at pearwood.info
Sat Aug 25 23:38:15 EDT 2012


On Sat, 25 Aug 2012 22:20:05 -0400, Christopher McComas wrote:

> Marshall,24,Ohio State,48,
> Kentucky,14,Indiana,10,
> Marshall,10,Indiana,7,
> Ohio State,28,Kentucky,10
> 
> That's just a quick example, I can handle seperating the data in the
> lines, figuring it all out, I just am unsure of how to keep a running
> total of a team's record. I would do "for line in file:" then on the
> first line I see that Marshall lost so they would have 1, Ohio State won
> so they'd have 1 win. It'd go to the next line Kentucky 1 win, Indiana 1
> loss, then on the 3rd line, Marshall got a win so they'd have 1 win, but
> it would have to remember that loss from line 1...

There are many ways to do this. Here's one: we keep three sets of data, 
wins, losses and ties.

wins = {}
losses = {}
ties = {}
for line in open("datafile.txt"):
    line = line.strip()  # get rid of leading and trailing whitespace
    line = line.rstrip(',')  # and any trailing comma
    teamA, scoreA, teamB, scoreB = line.split(',')  # split on commas
    teamA = teamA.strip().title()  # normalise the case
    teamB = teamB.strip().title()
    scoreA = int(scoreA)
    scoreB = int(scoreB)
    if scoreA == scoreB:
        # Handle a draw.
        ties[teamA] = ties.get(teamA, 0) + 1
        ties[teamB] = ties.get(teamB, 0) + 1
    else:
        if scoreA > scoreB:
            winner = teamA
            loser = teamB
        else:
            winner = teamB
            loser = teamA
        wins[winner] = wins.get(winner, 0) + 1
        losses[loser] = losses.get(loser, 0) + 1


Once you've done that, you can check the win/loss score of any team:

name = 'Marshall'
w = wins.get(name, 0)
l = losses.get(name, 0)
d = ties.get(name, 0)
total = w+l+d
print(
  "Team %s played %d games, won %d, lost %d and tied %d."
  % (name, total, w, l, d)
  )


If you want to store these results permanently, you need to write them 
out to file. You can roll your own, but a simpler way might be to use one 
of the pickle, json, csv or plistlib modules to do it.


-- 
Steven



More information about the Python-list mailing list