我刚刚开始学习如何在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