繁体   English   中英

改变 DNA 核苷酸中字母的程序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM