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