def函数比较两个字符串

时间:2019-05-05 18:43:45

标签: python-3.x

我们需要定义一个比较两个字符串的函数,如果它们不同,我们想知道索引。问题是,无论我们使用什么插入,即使它们不相同,我们也总是得到-1。

def mutation_detector(seq1,seq2):
    if DNAval(seq1) and DNAval(seq2) == True:
        if len(seq1) == len(seq2):
            for i in range(0, len(seq1)) and range(0, len(seq2)):
                if seq1[i] != seq2[i]:
                    return(i)
                else:
                    return(-1)
        else:
            return('Wrong input')
    else:
        return('Wrong input')

print(mutation_detector('ATCGGGTA','ATCGGCTA'))

6 个答案:

答案 0 :(得分:0)

基本上,您使用的是and错误,并且我认为有些基本的逻辑错误:

而不是说“做A和B”,而是说“如果A为True而B为True”

我修复它的尝试如下:

if DNAval(seq1) and DNAval(seq2): 
    if len(seq1) == len(seq2): 
        for (i, (elem1, elem2)) in enumerate(zip(seq1, seq2)): 
            if elem1 != elem2: 
                    return i
        return -1

循环中的if-else总是在First循环迭代中返回:它获取前两个字符并进行比较;他们平等吗?否->返回-1

答案 1 :(得分:0)

如果遵循逻辑,它将开始比较字符串。如果两个字母相同,则使用ELSE(因为它们没有不同),并在仅检查第一个字母之后结束例程。

仅当例程在for循环中一直返回而不返回索引号时,才希望该例程返回-1。所以,

更改如下:

def test(seq1, seq2):
    if len(seq1) == len(seq2):
        for i in range(0, len(seq1)):
            if seq1[i] != seq2[i]:
                return(i)
        return(-1)
    else:
        return('Wrong input')

print( test('Hello1', 'Hello2'))
print('done')

答案 2 :(得分:0)

问题是,您第一次运行for循环时将返回-1,因为会立即输入else子句。 请将else子句与for循环本身一起使用。 例如:

def compare_strings(seq1, seq2):
    if len(seq1) == len(seq2):
        for i in range(0, len(seq1)):
            if seq1[i] != seq2[i]:
                return i
        else:
            return -1
    else:
        return 'Wrong input'

(请注意,引发自定义异常可能比在此处返回“错误输入”更好。)

答案 3 :(得分:0)

ObservableCollection

答案 4 :(得分:0)

这就是我要怎么做

def mutation_detector(seq1, seq2):
    if not DNAval(seq1) or not DNAval(seq2) or len(seq1) != len(seq2):
        return "Wrong input"  # maybe raise ValueError if DNAval fails instead?

    for index, (base1, base2) in enumerate(zip(seq1, seq2)):
        if base1 != base2:
            return index

    return -1

答案 5 :(得分:0)

尝试一下, 无法比较时将返回索引,否则将比较两个字符并再次打印相等并与字符串长度比较。

def mutation_detector(seq1,seq2):
    count=0
    if len(seq1) == len(seq2):
         for i in range(0, len(seq1)) and range(0, len(seq2)):
               if seq1[i] != seq2[i]:
                    return i
               else:
                    count=count+1
   if count==len(seq1):
         return 'Equal'
print(mutation_detector('ATCGGCTA','ATCGGCTA'))