-2

我是新人。。我的剧本很长,所以我会写下具体的部分。

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
4

2 回答 2

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

假设i == 'A', thenA[i]实际上被翻译成A['A']返回:

list indices must be integers, not str

这意味着您不能通过字符串索引访问列表,列表索引是整数。

此外,Python 不支持多个返回语句:

return G
return C
return T
return A

这将始终返回 G

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

return G,C,T,A

上面的 return 语句返回一个tuple包含G,C,T,A

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

于 2013-08-21T10:28:16.037 回答
0

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

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

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

然后比较变量“字母”

if letter == 'A':
    ...

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

于 2013-08-21T10:30:17.850 回答