Python 字符串转换器程序不工作

Python 字符串转换器程序不工作,python,Python,我正在尝试制作一个基本程序,将字符串atgtacatggcatagccata转换为它的RNA序列,即uacauguaccuguaucgguau 但是输出是:CCCCUUUUUUUUUUUU 但它不太管用。我认为问题在于,它会逐个遍历整个字符串中的每个字母 我对生物信息学编程非常陌生,所以欢迎提出任何建议 DNA = "ATGTACATGGGCATAGCCATATA" dna_length = len(DNA) print("DNA: " + DNA) print() print("Length

我正在尝试制作一个基本程序,将字符串atgtacatggcatagccata转换为它的RNA序列,即uacauguaccuguaucgguau

但是输出是:CCCCUUUUUUUUUUUU

但它不太管用。我认为问题在于,它会逐个遍历整个字符串中的每个字母

我对生物信息学编程非常陌生,所以欢迎提出任何建议

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

我将使用
dict
执行替换,然后使用
join
中的生成器表达式执行翻译

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

我将使用
dict
执行替换,然后使用
join
中的生成器表达式执行翻译

>>> RNA = {'G':'C', 'C':'G', 'A':'U', 'T':'A'}
>>> DNA = 'ATGTACATGGGCATAGCCATATA'
>>> translated = ''.join(RNA[i] for i in DNA)
>>> translated
'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))
最好的解决方案是使用:

在Python 3中,无需任何导入即可完成:

>>> s = "ATGTACATGGGCATAGCCATATA"
>>> s.translate({ord(k): v for k, v in zip('GCAT', 'CGUA')})
'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))
最好的解决方案是使用:

在Python 3中,无需任何导入即可完成:

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

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")
    elif char == "C":
        RNA.append("G")
    elif char == "A":
        RNA.append("U")
    elif char == "T":
        RNA.append("A")

print("".join(RNA))
结果:

DNA: ATGTACATGGGCATAGCCATATA
()
Length of DNA in base pairs: 23
UACAUGUACCCGUAUCGGUAUAU
更正代码:

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")
    elif char == "C":
        RNA.append("G")
    elif char == "A":
        RNA.append("U")
    elif char == "T":
        RNA.append("A")

print("".join(RNA))
结果:

DNA: ATGTACATGGGCATAGCCATATA
()
Length of DNA in base pairs: 23
UACAUGUACCCGUAUCGGUAUAU

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

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

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

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

我想这是因为你有<代码>对于DNA中的行:if char==“C”:对于DNA中的字符:if char==“C”:对不起,我知道应该是charI,我想这是因为你<代码>对于DNA中的行:if char==“C”:对于DNA中的字符:if char==“C”:对不起,我知道应该是Chart谢谢。在这个问题上有很多很好的答案和解决方案,值得赞赏的是genexp除了可读性之外没有什么真正的优势。谢谢。在这个问题上有很多很好的答案和解决方案,值得注意的是,genexp除了可读性之外没有任何真正的优势。@AshwiniChaudhary虽然这是python 3,但你的不起作用,因为
string
没有
maketrans
;)我认为string.maketrans(这个答案)会更快,因为它使用了一个简单的查找表,而不是其他使用dict的解决方案。导入不适用于Python 3解决方案。@AshwiniChaudhary虽然如果这是Python 3,您的不工作,因为
string
没有
maketrans
;)我认为string.maketrans(这个答案)会更快,因为它使用了一个简单的查找表,而不是使用dict的其他解决方案。导入不适用于Python 3解决方案。