python中的错误

时间:2013-08-21 10:20:35

标签: 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

我修好了,你告诉我,如果我说对了吗? :

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

2 个答案:

答案 0 :(得分: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

这将始终返回G

如果要返回所有这些值,请将其替换为:

return G,C,T,A

上述return语句返回tupleG,C,T,A

如果您只想返回一个,请将每个return语句放在elif子句中。

答案 1 :(得分:0)

在循环中,您必须执行以下操作:

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

如果迭代范围函数结果,“i”将采用数值。如果你遍历字符串我会取字符串的每个字符

然后比较变量“letter”

if letter == 'A':
    ...

在variability函数中要小心,只返回第一个return语句中的值。