-6

コードは次のとおりです。

if gam < 1:
    file = open("data1.dat","w")
    gam = gam2
elif gam == 1:
    file = open("data2.dat","w")
    gam = gam3
elif gam > 1:
    file = open("data3.dat","w")

実行すると、コロンを指す構文エラーが表示されます if gam < 1 コロンを削除すると、単語ファイルを指す構文エラーが表示されます。

編集:ここにコードの詳細があります

for o in range (3):
    for i in range (0,len(x)):
        for j in range (0,len(y)):
            a[i][j]=x[i]
            b[i][j]=y[j]

    for i in range (0,len(x)):
        for j in range (0,len(y)):
            u[i][j] = (vinf*a[i][j]*b[i][j]*(4*math.pi*math.pow(3,2)+gamma*(math.pow(a[i][j],2)+math.pow(b[i][j],2))))/(2*math.pi*math.pow(math.pow(a[i][j],2)+math.pow(b[i][j],2),2))
            v[i][j] = (1/2)*vinf*((math.pow(b[i][j],2)*(4*math.pi*math.pow(3,2)+b[i][j]*(math.pow(a[i][j],2)+math.pow(b[i][j],2))))/(math.pi*math.pow(math.pow(a[i][j],2)+math.pow(b[i][j],2),2))-(2*math.pow(3,2))/(math.pow(a[i][j],2)+math.pow(b[i][j],2))+(gamma*math.log1p(math.sqrt(math.pow(a[i][j],2)+math.pow(b[i][j],2))/3))/math.pi+2)
            p[i][j] = 1-(math.pow(u[i][j],2)+math.pow(v[i][j],2))
            s[i][j] = (vinf*b[i][j])*(1-(math.pow(3,2)/(math.pow(a[i][j],2)+math.pow(b[i][j],2)))+(gamma/(2*math.pi))*math.log1p(math.sqrt(math.pow(a[i][j],2)+math.pow(b[i][j],2))/3)


    if gam < 1:
        file = open("data1.dat","w")
        gam = gam2
    elif gam == 1:
        file = open("data2.dat","w")
        gam = gam3
    elif gam > 1:
        file = open("data3.dat","w")

edit2: s 行に括弧がないように見えましたが、ファイルを閉じるときにエラーが発生するようになりました

if gam < 1:
        file = open("data1.dat","w")
        gam = gam2
    elif gam == 1:
        file = open("data2.dat","w")
        gam = gam3
    elif gam > 1:
        file = open("data3.dat","w")
    file.write('title = "Driven Cavity"\r\n')
    file.write('variables = "x", "y", "u", "v", "p", "s"\r\n')
    file.write('ZONE T="All"\r\n')
    file.write(' I={}'.format(len(x)))
    file.write(' J={}'.format(len(x)))
    file.write(' K=1')
    file.write(' ZONETYPE=Ordered\r\n')
    file.write(' DATAPACKING=POINT\r\n')

    for i in range (0,len(x)):
        for j in range (0,len(y)):
            file.write('{}\t'.format(a[i][j]))
            file.write('{}\t'.format(b[i][j]))
            file.write('{}\t'.format(u[i][j]))
            file.write('{}\t'.format(v[i][j]))
            file.write('{}\t'.format(p[i][j]))
            file.write('{}\t\n'.format(s[i][j])
    file.close()

別の括弧を気にしないでください。長い一日だった

4

4 に答える 4

1

()、{}、[]、''、"" などの不一致エラーを回避するには、できれば特定の言語の知識を持って、クローザーを使用するときにオープナーを示すコード エディターを使用します。Idle のエディターは Python に対してこれを行い、複数の言語に対しては Notepad++ を使用し、さまざまな言語に対しては他のいくつかのエディターを使用します。

(指定された場所で) 間違っていると思われる不可解な SyntaxError が発生した場合は、何らかの方法でコードを変更し、インジケーターが動くかどうかを確認します。元のコードでは、'1==1' のように if の前の行に何かを置いていた場合、代わりに ^ がその行に移動していました。その場合、問題は if ステートメントの前にあることがわかります。

于 2012-05-29T00:16:12.120 に答える
1

(math.pow(a[i][j],2)ステートメントの直前のマラソン式のこの特定の式はif、終了が欠落しているように見えます)

すなわち、

s[i][j] = (vinf*b[i][j])*(1-(math.pow(3,2)/(math.pow(a[i][j],2) + ...

する必要があります

s[i][j] = (vinf*b[i][j])*(1-(math.pow(3,2)/(math.pow(a[i][j],2)) + ...

ただし、式の長さと必要なグループ化の可能性を考えると、特定するのは困難です。

于 2012-05-28T23:26:27.947 に答える
0

あなたの質問とは直接関係ありませんが、あなたのコードは非常に多くの不要な作業を行っているようです。私はそれを少し合理化しようとしました。

from math import log1p, sqrt, pi
NEWLINE = '\r\n'
header = NEWLINE.join([
    'title = "Driven Cavity"',
    'variables = "x", "y", "u", "v", "p", "s"',
    'ZONE T="All"',
    ' I={} J={} K=1 ZONETYPE=Ordered',
    ' DATAPACKING=POINT',
    ''
])

for o in range(3):
    if gam < 1:    fname = "data1.dat"
    elif gam == 1: fname = "data2.dat"
    else:          fname = "data3.dat"

    with open(fname, "w") as outf:
        outf.write(header.format(len(x), len(y)))

        for _x in x:
            for _y in y:
                _xsq = _x**2
                _ysq = _y**2
                sqsq = (_xsq + _ysq)**2
                chunk = gamma*log1p(sqrt(_xsq+_ysq)/3.)/pi

                u = 0.5*vinf*_x*_y*(36.*pi + gamma*(_xsq+_ysq))/(pi*sqsq)
                v = 0.5*vinf*(2. + _ysq*(36.*pi + _y*(_xsq+_ysq))/(pi*sqsq) - 18./(_xsq+_ysq) + chunk)
                p = 1. - (u**2 + v**2)
                s = vinf*_y*(1. - 9./(_xsq+_ysq) + 0.5*chunk)

                outf.write('{}\t{}\t{}\t{}\t{}\t{}{}'.format(_x, _y, u, v, p, s, NEWLINE))

お役に立てれば。

于 2012-05-29T01:55:36.933 に答える