2013-08-21 43 views
-2

即時新.. 我的腳本很長,所以我會寫下具體的部分。python中的錯誤

str= '' 
#str is a long DNA sequence 

def FIND_UPPER(str): 
    global x 
    x=str.upper() 
    y=0 
    while y>(-1): 
     y=x.find('CTTTGATTCCT') 
     z=x[y+11:y+22] 
     x=x[y+23:] 

     variability(z) 

#variability is another function 

FIND_UPPER(str) 

,然後我得到這個消息:

列表索引必須是整數,而不是str的

那些行:

variability(z) 
FIND UPPER(str) 

我怎樣才能解決這個問題? 感謝

編輯: 這是變異:

A=[0]*10 
C=[0]*10 
T=[0]*10 
G=[0]*10 

def variability(z): 
    for i in z: 
     if i=='A': 
      A[i]=A[i]+1 
      i=i+1 

     elif i=='T': 
      T[i]=T[i]+1 
      i=i+1 

     elif i=='C': 
      C[i]=C[i]+1 
      i=i+1 

     elif i=='G': 
      G[i]=G[i]+1 
      i=i+1 

    return G 
    return C 
    return T 
    return A 

我固定它,u能告訴我,如果我有ü吧? :

def variability(z): 
    for i in range(len(z)): 
     if i=='A': 
      A[i]=z[i] 
      A[i]+=1 
      i+=1 

     elif i=='T': 
      T[i]=z[i] 
      T[i]+=1 
      i+=1 

     elif i=='C': 
      C[i]=z[i] 
      C[i]+=1 
      i+=1 

     elif i=='G': 
      G[i]=z[i] 
      G[i]+=1 
      i+=1 

    return G,C,T,A 
+1

你能告訴我們'變異性'嗎? – TerryA

+9

以及顯示錯誤指向的實際回溯。這不僅僅是毫無意義的噪音,它實際上告訴你如何調試問題。 –

+2

第一件事 - 函數中的多個'return'語句不起作用。只有第一個將被執行,因爲它突破了功能。如果你想返回多個東西,請嘗試使用一個元組。 – rlms

回答

3
def variability(z): 
    for i in z: 
     if i=='A': 
      A[i]=A[i]+1 
      i=i+1 

假設i == 'A',則A[i]實際上是轉化爲A['A']返回:

list indices must be integers, not str

這意味着你不能用一個字符串索引,列表索引訪問列表是整數。

此外,Python不支持多個return語句:

return G 
return C 
return T 
return A 

這將始終返回摹

如果你想返回所有這些值,然後將其替換爲:

return G,C,T,A 

上面的返回語句返回一個tupleG,C,T,A組成

如果您只想返回一個,請將return聲明放在您的elif子句中。

0

在你必須做的是這樣的循環:如果您遍歷範圍功能結果

for i in range(len(z)): 
    letter = A[i] 

,「我」將數值。如果您遍歷字符串我將採取串

的的每一個字符,然後比較變量「信」

if letter == 'A': 
    ... 

在變異函數謹慎,只在第一個return語句的值將返回。

+0

這將返回一個錯誤,因爲'z'是一個字符串。 – Ofiris

+0

你說得對。剛剛編輯感謝:) – moliware

+0

當然,在一個側面說明,我會使用'xrange'。 – Ofiris