[英]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
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.