Транспозиции и перестановки - ошибка выполнения - PullRequest
2 голосов
/ 19 июня 2020

Это вопрос, на который я должен ответить:

Найдите последовательность перестановок букв, которые преобразуют последовательность MARINE (буквы пронумерованы 0..5) в последовательность AIRMEN. Транспозиции представлены парами целых чисел. Например, пара (0,1) преобразует MARINE в AMRINE. Транспозиции выполняются слева направо. Вы должны определить последовательность, написав что-то вроде этого (точки должны быть заменены числами, каждая пара в круглых скобках определяет одну перестановку, и эти перестановки выполняются последовательно слева направо):

def sequence () :

return [(..., ...), ..., (..., ...)]

Когда я запускаю программу, мне кажется, что она работает ошибка. Я не могу найти ошибку. Было бы очень полезно, если бы мне помогли. Спасибо! :)

Это мой код:

def sequence(original, target):

    permutation = []

    chars_original = []
    for char in original:
        chars_original.append(char)
    #print('original: ', chars_original)

    chars_target = []
    for char in target:
        chars_target.append(char)
    #print('target: ', chars_target)


    for i in range(0, len(target)):
        if chars_target[i]== chars_original[i]:
            continue
        else:
            temp_list = []
            temp_list.append(i)
            j = chars_original.index(chars_target[i])
            temp_list.append(j)
            temp = chars_original[i]
            chars_original[i] = chars_original[j]
            chars_original[j] = temp
            a = tuple (temp_list)
            permutation.append(a)
            #print(permutation)
            #print(chars_original)

    return permutation

sequence('MARINE', 'AIRMEN')

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Можете попробовать это


def sequence(original, target):

    # convert to list so the string becomes mutable
    original = list(original) 
    target = list(target)

    seq = []

    for i in range(len(original)):
        if original[i] != target[i]:
            for j in range(i+1, len(original)):
                if original[j] == target[i]:
                    original[i], original[j] = original[j], original[i] # swap if the same
                    seq.append((i, j))
    return seq

sequence('MARINE', 'AIRMEN')

0 голосов
/ 03 августа 2020
def sequence(y,z):
  a=list(y)
  b=list(z)
  d=0
  l=[]
  while(d<len(y)):
    if(a[d]==b[d]):
      d=d+1
    else:
      e=a.index(b[d])
      a[e],a[d]=a[d],b[d]
      l=l+[(d,e)]
  return l
    
print(sequence("MARINE","AIRMEN"))
...