如何制作一个程序里面有"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->T
和 G->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),反之亦然。
我正在尝试制作一个程序,将字母替换为其他字母,例如将 '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->T
和 G->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),反之亦然。