我正在尝试创建一个程序,用其他字母替换字母,例如将'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)
这会返回错误。我该怎么办?
答案 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->T
和G->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),反之亦然。