John Salerno wrote: > Here's my code, with the error following it: > > props = ['A', 'B', 'C', 'D'] > group1 = ['C', 'A', 'D', 'B', 17] > group2 = ['A', 'B', 'D', 'C', 32] > group3 = ['D', 'B', 'C', 'A', 34] > group4 = ['B', 'A', 'C', 'D', 17] > > # Submitter: Michael Davies > def all_perms(str): > if len(str) <=1: > yield str > else: > for perm in all_perms(str[1:]): > for i in range(len(perm)+1): > #nb str[0:1] works in both string and list contexts > yield perm[:i] + str[0:1] + perm[i:] > > def checkOrder(x, y): > x_votes = 0 > y_votes = 0 > > if group1.index(x) < group1.index(y): > x_votes += group1[4] > else: > y_votes += group1[4] > > if group2.index(x) < group2.index(y): > x_votes += group2[4] > else: > y_votes += group2[4] > > if group3.index(x) < group3.index(y): > x_votes += group3[4] > else: > y_votes += group3[4] > > if group4.index(x) < group4.index(y): > x_votes += group4[4] > else: > y_votes += group4[4] > > if x_votes > y_votes: > return x > else: > return y > > for order in all_perms(props): > # if reduce(checkOrder, order) == 'A': > # print 'A wins:' > # print order > # if reduce(checkOrder, order) == 'B': > # print 'B wins:' > # print order > if reduce(checkOrder, order) == 'C': > print 'C wins:' > print order > # if reduce(checkOrder, order) == 'D': > # print 'D wins:' > # print order > >
I don't think you need all those 'ifs'. groups = [group1, group2, group3, group4] def checkOrder(x, y): x_votes = 0 y_votes = 0 for group in groups: if group.index(x) < group.index(y): x_votes += group[4] else: y_votes += group[4] for order in all_perms(props): winner = reduce(checkOrder, order) print '%s wins!' % winner print order Gerard -- http://mail.python.org/mailman/listinfo/python-list