如何制作一个“翻译”字母的程序?

时间:2018-06-07 09:07:53

标签: python bioinformatics biopython

我正在尝试创建一个程序,用其他字母替换字母,例如将'Q'替换为'R',或将'D'替换为'U'。我被困在这里:

def dna():
    seq = input('Enter the sequence:')
    list1 = list(seq)
    for i in seq:
       if i == 'A':
           seq[i] = 'T'
    return ''.join(list1)

这会返回错误。我该怎么办?

6 个答案:

答案 0 :(得分:1)

您的问题有很多答案,但没有一个解决您的问题,因此请查看您的代码,希望这可以提供帮助:

seq是一个字符串,因此在python中是不可变的,所以:

seq[i] = 'T'

无效的python。您已经创建了list1,所以您的意思是:

list1[i] = 'T'

请注意,这仍然无效,因为i不是索引,而是seq中的字符,但您可以使用enumerate()获取索引和字符,例如:

for i, c in enumerate(seq):
    if c == 'A':
        list1[i] = 'T'
...

在python中str.translate()非常适合翻译多个字符,例如举个简单的例子:

def dna():
    t = str.maketrans('A', 'T')
    seq = input('Enter the sequence: ')
    return seq.translate(t)

这很容易扩展,例如A->TG->C反之亦然:

    t = str.maketrans('AGTC', 'TCAG')

答案 1 :(得分:0)

如果它像将一个字符翻译成另一个字符一样简单,您可以使用替换。这是你想要的吗?

  function setKey(agent) {
    var myRegexp = /my (?:key|API key) is (.*)/gi;
    var queryText = request.body.queryResult.queryText;
    var match = myRegexp.exec(queryText);
    conv.user.storage.apiKey = match[1];
    conv.ask('Ok, saving ' + match[1]);
    agent.add(conv);
  }

答案 2 :(得分:0)

您可以使用str.replace

  eslint --init

<强>输出:

def dna(seq):
  # Replace Q with R
  seq = seq.replace("Q", "R")
  # Replace D with U
  seq = seq.replace("D", "U")
  return seq

seq = input('Enter the sequence:')
print(dna(seq))

答案 3 :(得分:0)

这是使用理解和查找字典的一种方式,它应该更容易扩展以包含更多字符:

mapping = {'Q': 'R', 'D': 'U'}
seq = input('Enter the sequence:')
new = ''.join(mapping.get(c, c) for c in seq)

示例输入'QUAD'变为'RUAU'。

答案 4 :(得分:0)

  

我只想制作一个简单的代码,将A(Adenin)转换成   T(Thymin),G(Guanin)成C(Cytosin),反之亦然。

基于此澄清,您实际想要做的是补充您的DNA序列。 Biopython提供此功能:

>>> from Bio.Seq import Seq
>>> seq = Seq('ATCGGAT')
>>> seq.complement()
Seq('TAGCCTA', Alphabet())

如果需要,您可以构建自己的实现,biopython以字母识别的方式使用str.translate(检查您的混合DNA / RNA等),请参阅source code

答案 5 :(得分:0)

def dna():
    d={'Adenin':'Thymin','Thymin':'Adenin','Guanin':'Cytosin','Cytosin':'Guanin'}
    seq = raw_input('Enter the sequence:')
    return d[seq]
print dna()

简单来说,您可以尝试制作字典并尝试将A(Adenin)转换为T(Thymin),G(Guanin)转换为C(Cytosin),反之亦然。