Python 如何识别有效的DNA序列?

Python 如何识别有效的DNA序列?,python,python-3.x,string,loops,dna-sequence,Python,Python 3.x,String,Loops,Dna Sequence,我刚刚开始学习如何用python编写代码,并将其应用到生物信息学领域。然而,我在下一个节目中遇到了麻烦: 首先,使用命令dna=input(“输入序列:”)引入一个dna序列(由g、c、t、a和n组成) 然后我试着确定DNA序列是否只有g、c、t、a和n个字符(不是特别按顺序排列)。如果没有,我希望程序会这样说:那不对,再次输入序列;然后让您输入一个新序列(并重复检查过程)。如果它确实只有这些字符,我希望程序向前推进,但我无法做到这一点 这或多或少是我到目前为止所做的。。。它适用于包含3

我刚刚开始学习如何用python编写代码,并将其应用到生物信息学领域。然而,我在下一个节目中遇到了麻烦:

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

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

这或多或少是我到目前为止所做的。。。它适用于包含3个或更多字符的序列,但如果您在“Not right,enter a sequence Reach:”之后写入一个字母(以其中一个字母为准),则它会理解该序列在不正确时是有效序列

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有效(dna序列):
对于dna中的核苷酸:#我们使用foreach遍历dna的字符
如果核苷酸不在“actgn”中:
返回错误
return True#如果没有核苷酸让我们返回false,那么它是有效的!
def start():
dna=输入(“输入序列:”)
虽然无效(dna):
dna=输入(“输入错误,请输入新的:”)
打印(“此处程序将继续使用有效的dna序列”)

我认为引入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