我正在编写一个程序,生成随机的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也不会出现任何错误.
发布于 2017-11-05 15:05:53
您的代码运行到无限循环中,因为(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'https://stackoverflow.com/questions/47123009
复制相似问题