繁体   English   中英

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

[英]How can you check for specific characters in a string?

当我运行程序时,它总是打印 true。 例如,如果我输入 AAJJ,它会打印 true,因为它只检查第一个字母是否为 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()

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

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

我喜欢@Alexander的答案,但对于多样性你可以看到

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

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

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

你有逻辑逆转。 你必须检查所有的位置。 如果其中任何一个未能在“ACTG”中识别为核苷酸,则立即为该字符串返回False 只有当你通过了所有角色时,你才能自信地回归真实

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

看看这张图片,看看这个 function 是如何工作的!

def DnaCheck(sequence):
    for base in sequence:
        if base.upper() in ('A', 'C', 'G', 'T'):
            continue
        else:
            print('False')
            return
    print('True')

如上图所示,我们首先使用for循环遍历给定序列中的每个碱基。 if给定的碱基属于 ('A', 'C', 'G', 'T') 集合(绿色信号),function 将continue到下一个碱基并检查(返回到for循环的开头,而不运行后续代码)。 它将continue检查后续碱基,除非它遇到不符合条件的碱基(红色信号),此时将执行else语句以打印 'False' 并且 function 将使用return ( print('True')不会被执行)。 在有效序列的情况下,检查最后一个碱基后, for循环将结束并执行print('True')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM