布尔值:使用!=和==

时间:2015-08-06 23:24:30

标签: python if-statement boolean bioinformatics

我正在尝试使用不同的布尔值来获得相同的结果。我有两个功能,我不明白为什么一个有效,另一个没有。

这有效:

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)

有没有人建议为什么会这样?

2 个答案:

答案 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