【问题标题】:How to make a program which "translates" letters? [duplicate]如何制作一个“翻译”字母的程序? [复制]
【发布时间】:2018-06-07 09:07:53
【问题描述】:

我正在尝试制作一个程序,将字母替换为其他字母,例如将“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)

这会返回一个错误。我能做什么?

【问题讨论】:

  • 查看内置函数str.translate()
  • 你想要的生物信息学转换是什么?这是转录、反向互补或翻译序列,还是别的什么?不管是什么,biopython 都可以为您做到这一点biopython.org 没有更多详细信息,您将无法获得明确的答案
  • @Chris_Rands 我只想编写一个简单的代码,将 A(Adenin) 转换为 T(Thymin),G(Guanin) 转换为 C(Cytosin),反之亦然。我是生物学和 python 的新手,这没有特定的目的。
  • @coldspeed,这不是一个真正合适的欺骗 IMO,这个问题有一个特定的生物信息学解决方案

标签: python bioinformatics biopython


【解决方案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')

【讨论】:

    【解决方案2】:

    我只想编写一个简单的代码,将 A(Adenin) 转换为 T(胸腺素)、G(鸟嘌呤)转化为C(胞嘧啶),反之亦然。

    基于此说明,您真正想要做的是补充您的 DNA 序列。 Biopython 提供此功能:

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

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

    【讨论】:

      【解决方案3】:

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

      def dna():
          seq = input('Enter the sequence: ')
          return seq.replace('A', 'T')
      
      print(dna())
      

      【讨论】:

        【解决方案4】:

        你可以使用str.replace:

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

        输出:

        Enter the sequence: QQQDDD
        RRRUUU
        

        【讨论】:

          【解决方案5】:

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

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

          示例输入“QUAD”变为“RUAU”。

          【讨论】:

            【解决方案6】:
            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),反之亦然。

            【讨论】:

              猜你喜欢
              • 2015-05-16
              • 2019-01-17
              • 2015-12-24
              • 2013-02-15
              • 1970-01-01
              • 2012-02-25
              • 2013-07-13
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多