换位和置换运行时错误

2024-06-17 11:22:42 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我必须回答的问题:

找到一个字母的换位序列,将序列MARINE(字母编号为0..5)转换为序列AIRMEN。换位用整数对表示。例如,对(0,1)将MARINE转换为AMRINE。换位是从左到右执行的。您应该这样写来定义序列(点应该被数字替换,括号中的每一对指定一个排列,这些排列从左到右依次执行):

def序列():

返回[(…,…),…,(…,…)]

当我运行这个程序时,我似乎遇到了一个运行时错误。我找不到错误在哪里。如果我能得到一些帮助,那将非常有用。谢谢!:)

这是我的代码:

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')

Tags: intargetfor字母序列templistprint
2条回答
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"))

你能试试这个吗


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')

相关问题 更多 >