如何识别有效的DNA序列



我刚刚开始学习如何在python中进行编码,并将其应用于生物信息学领域。尽管如此,我在下一个程序上遇到了麻烦:

  • 首先引入一个dna序列(由g、c、t、a和n组成(,使用命令dna=input("输入您的序列:"(

  • 然后我试着确定DNA序列是否只有g、c、t、a和n个字符(不是按这个顺序(。如果没有,我想让程序说这样的话:那不对,再次输入序列;然后让您输入一个新的序列(并重复检查过程(。如果它只有这些字符,我希望程序继续前进,但我做不到。

这或多或少是我到目前为止所做的。。。它适用于有3个或更多字符的序列,但如果你在"后面写一个字母(以哪个为准(;不对,再次输入序列:";,它知道它是一个有效的序列,而不是。

def Start():
dna=input("Enter a sequence:  ")
for i in range(len(dna)):
if dna[i] not in "actgn":
dna=input("Not right, enter a sequence again:  ")
else:
break
print("here the program will continue")

试试这个:

dna=input("Enter a sequence:  ")
sequenceCorrect = False
while not sequenceCorrect:
sequenceCorrect = True
for i in range(len(dna)):
if dna[i] not in "actgn":
sequenceCorrect = False
if not sequenceCorrect:
dna=input("Incorrect Sequence Please Try Again:  ")
print("here the program will continue")

这是一个很好的开始,但您没有在正确的位置中断(退出循环(。以下是我的建议(附评论(:


def is_valid(dna_sequence):
for nucleotide in dna: # we iterate through the chars of our DNA using a foreach
if nucleotide not in "actgn":
return False
return True # if no nucleotide made us return false, it's valid!
def start():
dna=input("Enter a sequence:  ")
while not is_valid(dna):
dna=input("Wrong squence, please enter a new one:  ")
print("here the program will continue with a valid dna sequence")

我认为引入Python的set是一个非常好的用例。使用set,您可以在一行中进行集合操作,简洁而优雅。查看此帖子了解更多信息。

关于代码:

def is_valid_dna(dna):
dna_ref = set("actgn") # breaks the string and returns: {'a', 'c', 'g', 'n', 't'}
dna = set(dna)
# check: characters in your string belongs to the reference group
#        the input contains at least 1 valid character
return dna.issubset(dna_ref) and len(dna)>0 

dna=''
while not is_valid_dna(dna):
dna = input("Enter a sequence:n")

执行后,它返回不同的输入:

Enter a sequence:
1
Enter a sequence:
Enter a sequence:
asdf
Enter a sequence:
actactact

最新更新