如何检查字符串中的特定字符?

时间:2017-09-13 23:36:42

标签: python python-2.7

当我运行程序时,它总是打印为true。例如,如果我输入AAJJ,它将打印为true,因为只检查第一个字母是否为真。 有人能指出我正确的方向吗?谢谢!

squence_str = raw_input("Enter either A DNA, Protein or RNA sequence:")

def DnaCheck():

    for i in (squence_str):
        if string.upper(i) =="A":
            return True
        elif string.upper(i) == "T":
            return True
        elif string.upper(i) == "C":
            return True
        elif string.upper(i) == "G":
            return True
        else:
            return False

print "DNA ", DnaCheck()

3 个答案:

答案 0 :(得分:7)

您需要检查DNA序列中所有碱基是否有效。

def DnaCheck(sequence):
    return all(base.upper() in ('A', 'C', 'T', 'G') for base in sequence)

答案 1 :(得分:2)

我喜欢@亚历山大的回答,但对于多样性你可以看到

def dna_check(sequence):
    return set(sequence.upper()).issubset("ACGT")
    # another possibility:
    # return set(sequence).issubset("ACGTacgt")

在长序列上可能更快,特别是如果作为合法序列的几率是好的(即大多数情况下你将不得不迭代整个序列)。

答案 2 :(得分:0)

更多关于你目前学习的水平......

你的逻辑逆转了。你必须检查所有的位置。如果它们中的任何一个未能在“ACTG”中识别出核苷酸,那么您会立即为该字符串返回 False 。只有当您通过所有字符时,才能自信地返回 True

import string

def DnaCheck(squence_str):

    for i in (squence_str):
        if string.upper(i) not in "ACTG":
            return False

    return True

test_cases = ["", "AAJJ", "ACTG", "AACTGTCAA", "AACTGTCAX"]
for strand in test_cases:
    print strand, DnaCheck(strand)

输出:

 True
AAJJ False
ACTG True
AACTGTCAA True
AACTGTCAX False