如何制作一个程序里面有"translates"个字母?

How to make a program which "translates" letters?

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

这returns一个错误。我能做什么?

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

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

print(dna())

您可以使用 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

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

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

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

您的问题有很多答案,但 none 解决了您的问题,因此请查看您的代码,希望这对您有所帮助:

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'
...

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

I just want to make a simple code which transforms A(Adenin) into T(Thymin), G(Guanin) into C(Cytosin) and vice versa.

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

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

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

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),反之亦然。