有什么方法可以在 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)
我正在尝试扩展我的波函数是 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)