3

I'm trying to convert the DNA code into RNA code using Python...

I write this:

print('Digite a sequência DNA a ser transcrita para RNA:')

my_str = raw_input()
print(my_str.replace('T', 'U'))

And it works, but.. now I need to convert A to U, T to A, G to C and C to G... I looked how I could do it, and did this:

print('Digite a sequência DNA a ser transcrita para RNA:')

my_str = raw_input()


RNA_compliment = {
    ord('A'): 'U', ord('T'): 'A',
    ord('G'): 'C', ord('C'): 'G'}

my_str.translate(RNA_compliment)

But I get this error:

Traceback (most recent call last):
  File "rna2.py", line 15, in <module>
    my_str.translate(RNA_compliment)
TypeError: expected a character buffer object

What i did wrong?

Trenton McKinney
  • 56,955
  • 33
  • 144
  • 158
Ricardo
  • 63
  • 1
  • 5
  • related: http://stackoverflow.com/questions/21038891/what-does-table-the-string-translate-function-mean – NightShadeQueen Aug 14 '15 at 21:18
  • [How to convert a set of DNA sequences into protein sequences using python programming?](https://stackoverflow.com/questions/40834338) has an answer of interest. – Trenton McKinney Aug 22 '20 at 18:40

1 Answers1

6

python 3:

  • str.maketrans is a static method, which returns a translation table usable for str.translate().
  • If there are two arguments, they must be strings of equal length.
i, j = "ATGC", "UACG"

tbl = str.maketrans(i, j)

my_str = "GUTC"

print(my_str.translate(tbl))

[out]:
'CUAG'

Using RNA_compliment

  • str.maketrans accepts one argument as a dictionary
  • {ord('A'): 'U', ord('T'): 'A', ord('G'): 'C', ord('C'): 'G'}
    • ord() isn't required
# dict without ord
RNA_compliment = {'A': 'U', 'T': 'A', 'G': 'C', 'C': 'G'}

tbl2 = i.maketrans(RNA_compliment)

print(my_str.translate(tbl2))

[out]:
'CUAG'

python 2:

  • If you want to make a table, use string.maketrans.
  • You can only use the ord with a dict for python3, not for python2:
In [1]: from string import maketrans

In [2]: i, j = "ATGC", "UACG"

In [3]: tbl = maketrans(i,j)

In [4]: my_str = "GUTC"

In [5]:  my_str.translate(tbl)
Out[5]: 'CUAG'
Trenton McKinney
  • 56,955
  • 33
  • 144
  • 158
Padraic Cunningham
  • 176,452
  • 29
  • 245
  • 321