an error in commented code?
Gerard Flanagan
grflanagan at yahoo.co.uk
Fri Apr 28 17:26:13 EDT 2006
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
More information about the Python-list
mailing list