0

ワイル群の根を計算するプログラムを作成しました。ただし、次のエラーが発生します。

Traceback (most recent call last):
  File "./rootsAn.py", line 58, in <module>
    equals = isequal(x[0],y[0])
TypeError: 'int' object is unsubscriptable

私はこのエラーを調べましたが、私が知る限り、両方とも配列であり、ではありませx[0]ん。私のコードは次のとおりです。y[0]ints

def innerprod(a,b):
    x = 0
    y = 0
    while x < len(a):
        y += a[x]*b[x]
        x += 1
    return y

def isequal (a,b):
    x = len(a)- 1
    y = 0
    counter = 0
    while y < x:
        if a[y] == a[x]:
            counter+=1
        else:
            counter +=0
        y += 1
    if counter == x:
        return True
    else:
        return False


simplerootsht = []
simpleroots = []
positiverootsht=[]
positiveroots = []
dim = 3

n = 0
while n < dim-1:
        x = []
        s = 0
        while s < dim:
            if s == n:
                x.append(1)
            elif s == n + 1:
                x.append(-1)
            else:
                x.append(0)
            s += 1
        simplerootsht.append([x,1])
        simpleroots.append(x)
        n += 1
for c in simpleroots:
    positiveroots.append(c)
for d in simplerootsht:
    positiverootsht.append(d)

print positiverootsht

for x in positiverootsht:
    for y in simplerootsht:
        equals = isequal(x[0],y[0])
        if equals == True:
            pass
        print x[0], y[0]
        b = innerprod(x[0], y[0])
        a = len(x[0])
        if b == 0:
            pass
        else:
            r = x[1]
            q = r - b
            print r, q
            x = 1
            while x < q: 
                z = [sum(pair) for pair in zip(x[0], x*y[0])]
                if z not in positiveroots:
                    positiveroots.append(z)
                    positiverootsht.append([z,x[1] + y[1]])
                x += 1

ありがとう!

4

2 に答える 2

3
for x in positiverootsht:

positiverootshtは整数のリストです。繰り返し処理すると、xに整数が返されます。したがって、xは実際にはintisequal()です。メソッドでx[0]のように添え字を付けることはできません。

そしてそうですy..それもintタイプです。

したがって、以下の行は機能しません:-

equals = isequal(x[0],y[0])

むしろ、ループで使用した変数を変更して機能させることができます。その場合x、メソッドで以前に宣言したのと同じようにのみリストとして機能します。

于 2012-10-03T19:30:15.387 に答える
1

あなたの例xでは、の要素を繰り返しますpositiverootsht。 にintpositiverootsが追加されます。simplerootsしたがってx、とyは両方とも整数です。

変数を再利用しているので、x以前は配列でしたが、次の行を使用してintに変換しました。

for x in positiverootsht:
    for y in simplerootsht:
于 2012-10-03T19:32:22.510 に答える