[英]a program to change letters in DNA nucleotide
我正在编写一个程序来改变 DNA 的序列。 找到字母“a”时,将其替换为“t”,反之。 但是我在程序运行时遇到了一个问题,它将“a”替换为“t”,然后再次将“t”替换为“a”。
我该如何解决?
编码:
def opposite_nucleotide(dna):
dna = dna.replace("a", "t")
dna = dna.replace("t", "a")
dna = dna.replace("g", "c")
dna = dna.replace("c", "g")
return dna
dna3 = input("Enter the DNA to represent it's oppsite one: ")
dna4 = opposite_nucleotide(dna3)
print(dna4)
事实证明,此功能 内置在 Python 中。
str.translate(表)
返回字符串的副本,其中每个字符已通过给定的转换表映射。 ...
您可以使用 str.maketrans() 从不同格式的字符到字符映射创建翻译 map。
示例用法:
def opposite_nucleotide(dna):
return dna.translate(str.maketrans("atgc", "tacg"))
str.maketrans
可以有多种调用方式,但我上面使用的形式类似于您在 Perl 中使用tr//
的方式:第一个参数中的每个字符将被第二个参数中的相应字符替换。
显然,如果您这样做是为了课程作业或教育目的,请不要仅仅求助于内置。
def opposite_nucleotide(dna):
new_dna = ""
for char in dna:
if char == "a":
new_dna += "t"
elif char == "t":
new_dna += "a"
elif char == "g":
new_dna += "c"
else:
new_dna += "g"
return new_dna
我想这应该工作..不漂亮但应该工作
#这不适用于大型 DNA 字符串
m=dict(zip('atgc','tacg'))
dna4=''.join([m[c] for c in dna3])
为此,对代码进行的最简单修改(尽管可能不是最有效的)是使用临时替换,即已知字符串中缺少的字符。 例如,通过将“a”替换为“x”,然后将“t”替换为“a”,最后将“x”替换为“t”,您将不会替换已替换的字母。
def opposite_nucleotide(dna):
dna = dna.replace("a", "x")
dna = dna.replace("t", "a")
dna = dna.replace("x", "t")
dna = dna.replace("g", "y")
dna = dna.replace("c", "g")
dna = dna.replace("y", "c")
return dna
dna3 = input("Enter the DNA to represent it's oppsite one: ")
dna4 = opposite_nucleotide(dna3)
print(dna4)
这样的方法会奏效吗?
def opp(string):
result = []
for char in string:
if char == 'a':
result.append('t')
elif char == 't':
result.append('a')
elif char == 'g':
result.append('c')
elif char == 'c':
result.append('g')
return ''.join(result)
print(opp('atgc'))
Output:
tacg
感谢@bullseye 的想法; 我现在将额外的if
语句更改为elif
!
输入文件格式是什么? 它是一个fasta文件吗? 您是否希望程序仅将文件中的所有字符串替换为 t 到 a ,反之亦然? 还是只替换您输入的字符串?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.