[H6-4](gene.py)编写一个从用户读取字符串的程序。该字符串表示DNA分子作为字母A,C,G和T的序列,每个字母代表不同的碱基。然后确定它是否代表潜在基因,如果它满足以下4部分密码子标准:
•从起始密码子ATG开始。 •它的长度是3的倍数。 •它以终止密码子TAG,TAA或TGA之一结束。 •在第一个密码子和最后一个密码子之间的密码子序列中,它没有中间终止密码子。
通过定义一个布尔函数is_gene(dna)来做到这一点,当dna是有效DNA时它返回True并且它满足每个密码子标准。
还定义一个布尔函数is_valid_DNA(seq),如果seq中的每个字符都是A,C,G或T中的一个,则返回True。否则返回False。
然后完成你的程序:使用你的is_valid_DNA(seq)函数来验证输入字符串seq的内容,如果它包含除A,C,G和T之外的任何字符,则打印无效DNA。否则,通过你的is_gene()函数和print如果它满足以前的4部分密码子标准就是潜在的基因,否则不是潜在的基因。
最后,如果输入字符串不是有效的DNA或违反4部分密码子标准,则打印出某种诊断信息,描述其无效的详细信息。该信息可能描述了为什么内容是无效的DNA,例如哪些碱基是非法的以及它们发生在什么序列位置。对于4部分密码子标准,它可能是诸如“不以ATG开始”或“长度不是3的倍数”等描述,等等。我会为诊断输出奖励最多1点的额外学分,这些输出非常详细且格式很好。
答案 0 :(得分:0)
看看以下两个功能。字符串可以用作列表或集合。这两个概念可以方便地检查您需要填写的条件
def is_valid_DNA(dna):
if len(set(dna) - {'A','C','G','T'}) == 0: return True
return False
def is_gene(dna):
if dna[0:3] != 'ATG':
print('Invalid start')
return False
if len(dna) % 3 != 0:
print('Invalid length')
return False
if dna[-3::] not in ['TAG', 'TAA', 'TGA']:
print('Invalid end')
return False
for i in range(len(dna)-3):
if dna[i:i+3] in ['TAG', 'TAA', 'TGA']:
print('Invalid inner sequence')
return False
return True
dna = input()
if not is_valid_DNA(dna): print('Not valid DNA')
else:
if is_gene(dna): print('Vaid DNA sequence!')
else: print('Invalid DNA sequence.')