我正在尝试编写一个生成随机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没有出现任何错误......
答案 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'