我正在尝试使用不同的布尔值来获得相同的结果。我有两个功能,我不明白为什么一个有效,另一个没有。
这有效:
dna='ATGTGGTAG'
def orf_4(dna):
if dna[len(dna)-3:]=='TGA' or dna[len(dna)-3:]== 'TAG' or dna[len(dna)-3:]=='TAA':
return 'This could be an ORF'
else:
return 'This is not an ORF'
print orf_4(dna)
这不是。对于任何输入,它都返回'This is not a ORF'。
dna='ATGTGGTAG'
def orf_3(dna):
if dna[len(dna)-3:]!='TGA' or dna[len(dna)-3:]!= 'TAG' or dna[len(dna)-3:]!='TAA':
return 'This is not an ORF'
else:
return 'This could be an ORF'
print orf_3(dna)
有没有人建议为什么会这样?
答案 0 :(得分:2)
每个条件之间的or
实际上应该是and
答案 1 :(得分:1)
使用第一个和第二个if语句,如果任何条件返回True
,则返回块将执行。
例如
>>> True or True or False
True
>>>
>>> True or False or False
True
因此在第二个示例中dna[len(dna)-3:]
不能等于所有三个字符串,因此至少有两个条件将返回True
,这意味着if语句将返回True
。
对于第二个声明,您应该使用and
而不是or
。如果一个条件返回False
,则整个语句将返回False
。
例如
>>> True and False and True
False