作为函数的较小部分,此代码旨在将所有“ G”替换为“ C”,所有“ T”替换为“ A”,反之亦然,但仍然无法按预期工作,它仅替换了一些实例而不是全部替换。
dna1.txt =“ GGTACGGATG”
file = open('dna1.txt')
contents = file.read()
replaced_contents = (contents.replace('G', 'C').replace('T', 'A',)
.replace('A', 'T').replace('C', 'G'))
print("Complement: {0}" .format(replaced_contents))
答案 0 :(得分:2)
您的替补者正在战斗。
您的第一个替换项将全部替换为“ C”:
CCTACCCATC
然后进行第二次替换,并将所有'T'替换为'A':
CCAACCCAAC
然后进行第三次替换,并将所有的“ A”(包括您先前交换为“ A”的“ T”)交换为“ T”:
CCTTCCCTTC
最终替换将所有“ C”(包括您之前交换为“ C”的“ G”)交换为“ G”并将其替换:
GGTTGGGTTG
这可以代替,但是作为免责声明,这是我第一次查看python,这可能不是很多代码!
contents = "GGTACGGATG"
replaced_contents = ""
for c in contents:
if c == 'G':
replaced_contents += 'C'
elif c == 'C':
replaced_contents += 'G'
elif c == 'T':
replaced_contents += 'A'
elif c == 'A':
replaced_contents += 'T'
else:
replaced_contents += c
print("Complement: {0}" .format(replaced_contents))
输出:
Complement: CCATGCCTAC
也可以通过替换词典来做到这一点:
contents = "GGTACGGATG"
replacement = {
'G':'C',
'C':'G',
'T':'A',
'A':'T'
}
replaced_contents = ""
for c in contents:
replaced_contents += replacement.get(c) or c
print("Complement: {0}" .format(replaced_contents))
答案 1 :(得分:1)
其他人指出了链式.replace
的问题,但是内置了translate
字符串内置函数,可以轻松快捷地完成任务:
dna = "GGTACGGATG"
xlat = str.maketrans('GTAC','CATG') # build translation table.
result = dna.translate(xlat) # translate using table.
print(result)
输出:
CCATGCCTAC
参考文献:
答案 2 :(得分:0)
如Felix所说,您必须将其视为两个变量切换问题的扩展情况,在这种情况下,您使用临时值来保存信息,例如
a = temp
a = b
b = temp
现在,如果我们将其应用于字符串,则需要创建特定的模式来替换第一个字母,例如print('GGTACGGATG'.replace('C','{PH}').replace('G', 'C').replace('{PH}', 'G'))
会在C和G之间切换。
请注意,您还必须注意正确验证占位符,使其不包含任何替换的字母。
答案 3 :(得分:0)
让我们逐步运行代码:
input = GGTACGGATG
用Cs替换所有Gs
input = input.replace('G', 'C')
现在输入看起来像这样:
CCTACCCATC
等等!我们还希望将所有C替换为G。我们怎么知道哪些最初是G或C?
这种方法行不通。
我们如何使用令牌而不是C
进行第一次替换,然后最后再用G
替换令牌?令牌应该是文本中不会出现的东西,并且可以是一个或多个字符。在这里使用#
。真的可以是任何东西。
input = input.replace('G', '#')
现在输入看起来像这样:
##TAC##AT#
好的,现在将所有C
更改为G
。
input = input.replace('C', 'G')
我们得到
##TAG##AT#
是的!现在我们没有C
了,我们知道G
是什么了。因此,让我们现在替换#
。
input = input.replace('#', 'C')
我们得到
CCTAGCCATC
完成!所有G
和C
都已交换位置!
但是我们如何找到输入中肯定没有出现的令牌? ...我们不能。因此,如果输入来自用户并且可能是任何东西,请不要使用令牌进行替换。
replace
方法的作用是逐个字母地遍历字符串,并用新字母替换每个出现的字母。对于下一次替换,我们再次运行此循环。
但是,最通用,最安全的方法将在一个循环中运行,并一次执行所有替换,就像这样:
result = ""
letters_array = input.split('')
for (letter of letters_array) {
if (letter == 'C') {
result += 'G'
} else if (letter == 'G') {
result += 'C'
} else {
result += letter
}
}
我将对样本的解释留给您练习:)