突变DNA发生器中无打印声明

时间:2014-06-10 15:24:23

标签: python-3.x bioinformatics dna-sequence

所以我有一个代码是一个突变的dna生成器 - 更具体地说,它产生100条链,任何碱基的点突变频率为0.066%,来自我在代码中指定的原始链。然而,我遇到的问题是print语句。我没有得到输出,我不知道为什么。这是我的代码:

import random

class DNA_mutant_generator:
    def __init__ (self, dna):
        self.dna = dna
        self.bases = bases

    def mutate(self, mutation_rate=0.0066): #add a specification of the mutation rate of 0.066%
        result = []
        mutations = []
        for base in self.dna:
            if random.random() < mutation_rate: #random.random() returns the next random floating point number in range [0.0,1.0)
                new_base = bases[bases.index(base) - random.randint(1, 3)] # subtracts the position of a certain base from a random integer within the range of 1 to 3 in the bases list. This creates the newly mutated base.
                result.append(new_base)#append that new base to the result list
                mutations.append((base, new_base))#appends the original base, as well as the new mutated base to a list of tuples
            else:
                result.append(base)# 
        return "".join(result), mutations # returns mutated strands, as well as mutations

       for result_string, mutations in results:
            if mutations: # skip writing out unmutated strings
                print(result_string, mutations)    

bases = "ACTG" #specifies the bases in the DNA strand
orig_dna = "GGCTCTCCAACAGgtaagcactgaagggtagaaggcatcgtctgtctcagacatgtctggcaccatccgctaagacattaccacgtgggtctcgagtatagctaacacccttctgtttggcagCTTACAGGAGCGAACGTTGG"
dna = orig_dna.upper()
dna_mutants = DNA_mutant_generator(dna)
dna_mutants.mutate()

有没有人知道我应该添加什么才能获得我在函数中指定的输出?我确实包含了一个打印声明,因此我不确定为什么代码不会产生任何结果。

编辑2:

代码看起来应该是这样吗?

import random

class DNA_mutant_generator:
    def __init__ (self, dna):
        self.dna = dna
        self.bases = bases

    def mutate(self, mutation_rate=0.0066): #add a specification of the mutation rate of 0.066%
        result = []
        mutations = []
        for base in self.dna:
            if random.random() < mutation_rate: #random.random() returns the next random floating point number in range [0.0,1.0)
                new_base = bases[bases.index(base) - random.randint(1, 3)] # subtracts the position of a certain base from a random integer within the range of 1 to 3 in the bases list. This creates the newly mutated base.
                result.append(new_base)#append that new base to the result list
                mutations.append((base, new_base))#appends the original base, as well as the new mutated base to a list of tuples
            else:
                result.append(base)# 
        return_value = "".join(result), mutations # returns mutated strands, as well as mutations 

        for result_string in results:
            if mutations: # skip writing out unmutated strings
                print(result_string, mutations)
        return return_value

results = [dna_mutants.mutate() for _ in range(100)] #prints 100 strands
bases = "ACTG" #specifies the bases in the DNA strand
orig_dna = "GGCTCTCCAACAGgtaagcactgaagggtagaaggcatcgtctgtctcagacatgtctggcaccatccgctaagacattaccacgtgggtctcgagtatagctaacacccttctgtttggcagCTTACAGGAGCGAACGTTGG"
dna = orig_dna.upper()
dna_mutants = DNA_mutant_generator(dna)
dna_mutants.mutate()

但如果我将结果移到fnction之外,那么mutate不会在函数内重复,我收到此错误消息:

 results = [dna_mutants.mutate() for _ in range(100)] #prints 100 strands
NameError: global name 'dna_mutants' is not defined

1 个答案:

答案 0 :(得分:1)

您将在print语句之前返回以下行:

return "".join(result), mutations # returns mutated strands, as well as mutations

如果要在此行之后打印信息,请删除return语句,而不是将表达式赋值给变量,然后在函数末尾返回该变量。

    return_value = "".join(result), mutations # returns mutated strands, as well as mutations

   for result_string in result:
        if mutations: # skip writing out unmutated strings
            print(result_string, mutations)  
    return return_value

编辑:您的新问题是因为您已经创建了一个一遍又一遍地调用自身的递归函数。每当一个函数调用它自己时,它就需要更多的堆栈空间,并且你多次调用堆栈“溢出”。