字符串转换器程序不工作

2024-10-01 09:29:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个基本程序,将一个字符串atgtacatggcatagccata转换成它的RNA序列,即uacauguacccguucgguau。你知道吗

但结果却是:ccccuuuuuuuuuuuuuuuuu

但不太管用。我认为问题是它通过整个字符串,每个字母都是独立的。你知道吗

我是一个非常新的生物信息学编程,所以任何建议将受到欢迎。你知道吗

DNA = "ATGTACATGGGCATAGCCATATA"
dna_length = len(DNA)

print("DNA: " + DNA)
print()
print("Length of DNA in base pairs: "+ str(dna_length))

RNA = []
for char in DNA:
    if char == "G":
        RNA.append("C")
for line in DNA:
    if char == "C":
        RNA.append("G")
for line in DNA:
    if char == "A":
        RNA.append("U")
for line in DNA:
    if char == "T":
        RNA.append("A")

print("".join(RNA))

Tags: 字符串in程序forifline序列length
3条回答

我将使用dict来执行替换,然后使用join中的生成器表达式来执行翻译。你知道吗

>>> RNA = {'G':'C', 'C':'G', 'A':'U', 'T':'A'}
>>> DNA = 'ATGTACATGGGCATAGCCATATA'
>>> translated = ''.join(RNA[i] for i in DNA)
>>> translated
'UACAUGUACCCGUAUCGGUAUAU'

str.maketrans将一组字符转换成另一组字符,还有str.translate将这种映射应用到字符串;因此,这应该是最快的方法

>>> DNA_2_RNA = str.maketrans('CGAT', 'GCUA')
>>> DNA = 'ATGTACATGGGCATAGCCATATA'
>>> RNA = DNA.translate(DNA_2_RNA)
>>> RNA
'UACAUGUACCCGUAUCGGUAUAU'

问题是,您在同一个列表上循环了四次,并且还修改了以前循环中所做的更改。因此,使用带有多个if-else条件的单个循环:

RNA = []
for char in DNA:
    if char == "G":
        RNA.append("C")
    elif char == "C":
        RNA.append("G")
    elif char == "A":
        RNA.append("U")
    elif char == "T":
        RNA.append("A")

print("".join(RNA))

最好的解决方案是使用^{}

>>> from string import maketrans
>>> s = "ATGTACATGGGCATAGCCATATA"
>>> tab = maketrans('GCAT', 'CGUA')
>>> s.translate(tab)
'UACAUGUACCCGUAUCGGUAUAU'

在Python3中,我们可以不使用任何导入:

>>> s = "ATGTACATGGGCATAGCCATATA"
>>> s.translate({ord(k): v for k, v in zip('GCAT', 'CGUA')})
'UACAUGUACCCGUAUCGGUAUAU'

相关问题 更多 >