【问题标题】:python 3.2 if-elsepython 3.2 if-else
【发布时间】:2012-05-28 23:04:59
【问题描述】:

我需要有关 python 3.2 if-else 语句的帮助 代码是:

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")

运行时,如果 gam

编辑: 这是更多的代码

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()

别管另一个括号。漫长的一天

【问题讨论】:

  • ... 这会告诉我问题出在if gam &lt; 1: 之前的代码行中。
  • 我不能让它失败(假设所有gam 变量都已定义)。您可以发布错误消息吗?或更多之前的代码?
  • 考虑重构代码。我相信你可以让它更短,重复代码更少。
  • 粘贴 if 条件上方的代码。
  • SO 不适用于“请定位我的语法错误”。

标签: python python-3.x if-statement


【解决方案1】:

您错过了行尾的结束 )

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))

【讨论】:

  • 干杯,下午 4:30,我只是看着剧本就头晕目眩。我现在需要一杯啤酒。
【解决方案2】:

if 语句之前的马拉松表达式中的这个特定表达式 (math.pow(a[i][j],2) 看起来好像缺少结束 )

即,

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)) + ...

虽然很难确定表达式的长度和所需的可能分组。

【讨论】:

    【解决方案3】:

    为避免不匹配的 ()、{}、[]、''、"" 等错误,请使用代码编辑器,当您使用关闭器时会指示开启者,最好了解特定语言。 Idle 的编辑器针对 Python 执行此操作,Notepad++ 针对多种语言执行此操作,而其他几个编辑器针对多种语言执行此操作。

    当您遇到一个看似错误的令人费解的 SyntaxError(在指示的位置)时,请以某种方式修改代码并查看指示器是否移动。在您的原始代码中,如果您将 anything 放在 if 之前的行中,例如 '1==1',则 ^ 将移至该行。那么你就会知道问题出在 if 语句之前。

    【讨论】:

    • 更好地编写代码以减少对此类工具的依赖。我从来没有见过这么长的数学密集型行,这只是为错误而哭泣。 PEP 8 似乎从未如此需要。
    【解决方案4】:

    与您的问题没有直接关系,但是:您的代码似乎做了很多不必要的工作。我试着精简一下。

    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))
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 2017-07-03
      • 2010-12-29
      • 1970-01-01
      相关资源
      最近更新 更多