我们需要定义一个比较两个字符串的函数,如果它们不同,我们想知道索引。问题是,无论我们使用什么插入,即使它们不相同,我们也总是得到-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'))
答案 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'))