有什么方法可以在 python 中使用 if 循环超过 4 次吗?

is there some way to use if loop in python more than 4 times ?

我正在尝试扩展我的波函数是 QHO 基础,需要在 python 中定义以下函数:

def basis(i,x):
    if i == 0:
        b=math.exp(-x**2/(2*hbar))/(hbar**(1/4)*math.pi**(1/4))
    if i == 1:
        b=math.sqrt(2)*x*math.exp(-x**2/(2*hbar))/(hbar**(3/4)*math.pi**(1/4))

    if i == 2:
        b=math.sqrt(2)*(4*x**2/hbar - 2)*math.exp(-x**2/(2*hbar))/(4*hbar**(1/4)*math.pi**(1/4))

    if i == 3:
        b= math.sqrt(3)*(8*x**3/hbar**(3/2) - 12*x/math.sqrt(hbar))\
        *math.exp(-x**2/(2*hbar))/(12*hbar**(1/4)*math.pi**(1/4))

    if i == 4:
        b= math.sqrt(6)*(16*x**4/hbar**2 - 48*x**2/hbar + 12)*math.exp(-x**2/(2*hbar))/(48*hbar**(1/4)*math.pi**(1/4))

    if i == 5:
        b= math.sqrt(15)*(32*x**5/hbar**(5/2) - 160*x**3/hbar**(3/2) + 120*x/math.sqrt(hbar))*math.exp(-x**2/(2*hbar))/(240*hbar**(1/4)*math.pi**(1/4))

    if i == 6:
        b= math.sqrt(5)*(64*x**6/hbar**3 - 480*x**4/hbar**2 + 720*x**2/hbar - 120)*math.exp(-x**2/(2*hbar))/(480*hbar**(1/4)*math.pi**(1/4))

    if i == 7:
        b= math.sqrt(70)*(128*x**7/hbar**(7/2) - 1344*x**5/hbar**(5/2) + 3360*x**3/hbar**(3/2) - 1680*x/math.sqrt(hbar))*math.exp(-x**2/(2*hbar))/(6720*hbar**(1/4)*math.pi**(1/4

    if i == 8:
        b= math.sqrt(70)*(256*x**8/hbar**4 - 3584*x**6/hbar**3 + 13440*x**4/hbar**2 - 13440*x**2/hbar + 1680)*math.exp(-x**2/(2*hbar))/(26880*hbar**(1/4)*math.pi**(1/4))

    if i == 9:
        b= math.sqrt(35)*(512*x**9/hbar**(9/2) - 9216*x**7/hbar**(7/2) + 48384*x**5/hbar**(5/2) - 80640*x**3/hbar**(3/2) + 30240*x/math.sqrt(hbar))*math.exp(-x**2/(2*hbar))/(80640*hbar**(1/4)*math.pi**(1/4))

    if i == 10:
        b= math.sqrt(7)*(1024*x**10/hbar**5 - 23040*x**8/hbar**4 + 161280*x**6/hbar**3 - 403200*x**4/hbar**2 + 302400*x**2/hbar - 30240)*math.exp(-x**2/(2*hbar))/(161280*hbar**(1/4)*math.pi**(1/4))

    if i == 11:
        b= math.sqrt(154)*(2048*x**11/hbar**(11/2) - 56320*x**9/hbar**(9/2) + 506880*x**7/hbar**(7/2) - 1774080*x**5/hbar**(5/2) + 2217600*x**3/hbar**(3/2) - 665280*x/math.sqrt(hbar))*math.exp(-x**2/(2*hbar))/(3548160*hbar**(1/4)*math.pi**(1/4))

    return(b)

我发现超过4次就不能用了。我应该如何实现这个?

您可以拥有的 if 的数量没有限制,但为了效率起见,您应该将除第一个以外的所有替换为 elif。在这种情况下,如 ,您的代码中的问题是拼写错误,而不是其他任何问题。

但是,这不是一个非常有效的方法;在 Python 中,dict 是其他语言的 switch/case 语句的规范替代:

FUNCS = {
    0: lambda x: math.exp(-x**2/(2*hbar))/(hbar**(1/4)*math.pi**(1/4)),
    1: lambda x: math.sqrt(2)*x*math.exp(-x**2/(2*hbar))/(hbar**(3/4)*math.pi**(1/4)),
    ...
}

def basis(i, x):
    return FUNCS[i](x)