results = {} # maps (letter, rank, accept/reject) to a vote count letters= {} # set of choices qlines = [] # list of write-in votes def post(vote): 'Tally a single ballot' rank = 1 for line in vote: print line.strip() for line in vote[:-1]: if rank > 3: break upperline = line.upper() letter = upperline[0] letters[letter] = True if letter == 'Q': qlines.append(str(rank) + ': ' + line.rstrip()) if 'REJ' in upperline: mark = 'REJECT' elif 'ACC' in upperline: mark = 'ACCEPT' else: mark = 'UNCLEAR' summary = (letter, rank, mark) print summary results[summary] = results.get(summary, 0) + 1 rank += 1 def accumulate(filename): vote = [] for line in open(filename): line = line.strip() if len(line) == 0: post(vote) vote = [] else: vote.append(line) post(vote) accumulate('308new.txt') for (letter, rank, mark), tally in results.items(): print letter, rank, mark, tally for line in qlines: print line