生成具有结束条件的随机RNA转录物

时间:2017-11-05 15:00:36

标签: python random dna-sequence

我正在尝试编写一个生成随机RNA转录本的程序: 所有4种RNA核苷酸具有相同的概率,每个序列以起始密码子开始,仅在引入终止密码子时结束。

import random

def random_rna():
    rna = 'AUG'
    stop_codon = ['UAG','UAA','UGA']
    while rna[-3:] not in stop_codon:
            rna += (random.choice('AUCG'))*3
    return rna

random_rna()

它不生成序列而python没有出现任何错误......

1 个答案:

答案 0 :(得分:1)

您的代码会遇到无限循环,因为(random.choice('AUCG'))*3没有按照您的想法执行操作...请参阅:

In [2]: (random.choice('AUCG')) * 3
Out[2]: 'GGG'

不是将函数调用三次,而是调用它一次并使结果重复三次。因此,while条件永远不会成立。

我建议附加到列表,然后在最后加入一次。它比你所做的所有字符串串联调用便宜。

stop_codon = ['UAG','UAA','UGA']

def random_rna():
    rna = ['AUG']
    while rna[-1] not in stop_codon:
            rna.append(''.join([random.choice('AUCG') for _ in range(3)]))

    return ''.join(rna)

print(random_rna())
'AUGAGCAGCGAGAGGGGCGCGCAGACGACGCCUGGCUCGUAUAGUUAUAGGACCUUCCGUGAACAUAACGCUACAGUCAGGUUGCAAAAUAAGCAGGUAACUAACUAUCUGCAGGCUCGAGUUGUCCUGCCGUAG'