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