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