这个DNA的功能是什么来解决这个问题python

时间:2018-04-04 04:27:55

标签: python

[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点的额外学分,这些输出非常详细且格式很好。

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.')