2016-09-19 25 views
-1

我想寫歪斜基因組的功能,但不斷收到錯誤:Python的傾斜基因組

Failed test #2. 
Test Dataset: AGCGTGCCGAAATATGCCGCCAGACCTGCTGCGGTGGCCTCGCCGACTTCACGGATGCCAAGTGCATAGAGGAAGCGAGCAAAGGTGGTTTCTTTCGCTTTATCCAGCGCGTTAACCACGTTCTGTGCCGACTTT 
Your output: ['0', '0'] 
Correct output: ['0', '0', '1', '0', '1', '1', '2', '1', '0', '1', '1', '1', '1', '1', '1', '1', '2', '1', '0', '1', '0', '-1', '-1', '0', '0', '-1', '-2', '-2', '-1', '-2', '-2', '-1', '-2', '-1', '0', '0', '1', '2', '1', '0', '0', '-1', '0', '-1', '-2', '-1', '-1', '-2', '-2', '-2', '-3', '-3', '-4', '-3', '-2', '-2', '-2', '-1', '-2', '-3', '-3', '-3', '-2', '-2', '-1', '-2', '-2', '-2', '-2', '-1', '-1', '0', '1', '1', '1', '2', '1', '2', '2', '3', '2', '2', '2', '2', '3', '4', '4', '5', '6', '6', '6', '6', '5', '5', '5', '5', '4', '5', '4', '4', '4', '4', '4', '4', '3', '2', '2', '3', '2', '3', '2', '3', '3', '3', '3', '3', '2', '1', '1', '0', '1', '1', '1', '0', '0', '1', '1', '2', '1', '0', '1', '1', '0', '0', '0', '0'] 

我的代碼:

Genome = "CATGGGCATCGGCCATACGCC" 
def SymbolArray(Genome, symbol): 
    array = {} 
    n = len(Genome) 
    ExtendedGenome = Genome + Genome[0:n//2] 
    for i in range(n): 
     array[i] = PatternCount(symbol, ExtendedGenome[i:i+(n//2)]) 
    return array 
def Skew(Genome): 
    skew = {} 
    skew[0]=0 
    n = len(Genome) 
    for i in range(1, n+1):  
     skew[i] = skew[i-1] 
     if Genome[i-1] == "G": 
      skew[i] = skew[i-1]+1 
     elif Genome[i-1] == "C": 
      skew[i] = skew[i-1]-1 
     else: 
      skew[i] = skew[i-1] 
     return skew 
    for i in skew.items(): 
     Skew(Genome) 

回答

1

的問題是簡單的比你正在做的。最大的問題似乎是:您的return聲明在循環中而不是在循環之後;你正在使用一個你想要一個數組的字典;你的範圍的結束是1;你有一個不必要的遞歸調用Skew()

這是你的代碼的工作簡化:

Genome = "AGCGTGCCGAAATATGCCGCCAGACCTGCTGCGGTGGCCTCGCCGACTTCACGGATGCCAAGTGCATAGAGGAAGCGAGCAAAGGTGGTTTCTTTCGCTTTATCCAGCGCGTTAACCACGTTCTGTGCCGACTTT" 

def Skew(genome): 
    skew = [0] 

    for i in range(1, len(genome)):  
     skew.append(skew[-1]) 

     if genome[i - 1] == "G": 
      skew[i] = skew[i - 1] + 1 
     elif genome[i - 1] == "C": 
      skew[i] = skew[i - 1] - 1 

    return skew 

print(Skew(Genome)) 

Can you also let me know can I use it in dictionary form?

如果你想在skew容器是一個字典,在你原來的,你可以做到以下幾點:

def Skew(genome): 
    skew = {0:0} 

    for i in range(1, len(genome)): 

     if genome[i - 1] == "G": 
      skew[i] = skew[i - 1] + 1 
     elif genome[i - 1] == "C": 
      skew[i] = skew[i - 1] - 1 
     else: 
      skew[i] = skew[i - 1] 

    return [value for (key, value) in sorted(skew.items())] 

但我不推薦它。字典通常用於表示稀疏數組,但在這裏不是這種情況。另一種實現方法是使用OrderedDict - 它可以讓你避免列表理解,並簡單地返回skew.values()

+0

謝謝我正在嘗試學習沒有預先知識的Python。你還可以讓我知道我可以用字典形式嗎?如果是,那麼代碼是什麼? – Azia

+0

@Azia,我也添加了一個基於字典的解決方案。 – cdlane

+0

謝謝我,我做到了。我是這個論壇的新手,所以不知道這些事情:) – Azia

0
def Skew(Genome): 
    skew = {} 

    for base in range(1, len(Genome)+1): # since we start at 1 and not 0 as we should we are adding one to the length 

     if Genome[base - 1] == "G": # subtracting one since we start at one so base at the 0 position has to be included 
      skew[base] = skew[base - 1] + 1 
     elif Genome[base - 1] == "C": 
      skew[base] = skew[base - 1] - 1 
     else: 
      skew[base] = skew[base - 1] 


    return skew