Python 如何修复列表的for循环

Python 如何修复列表的for循环,python,list,function,math,Python,List,Function,Math,我试图创建y作为一个数组,以创建一个通过zeta迭代的函数,该函数依赖于使用for循环的E all。但是,这些值不会添加到列表中 我还尝试将变量和数学函数定义为两个不同的编码函数 现在的程序应该将y值绘制为Zeta的函数,Zeta随能量变化。您不需要将循环置于函数中,只需将其置于脚本的顶层即可。并使用y.append()和E.append()添加到这些列表中 for i in range(1, 83): alpha = cmath.sqrt(2*m*(E[i-1]+Vo)/(hbar*

我试图创建y作为一个数组,以创建一个通过zeta迭代的函数,该函数依赖于使用for循环的E all。但是,这些值不会添加到列表中

我还尝试将变量和数学函数定义为两个不同的编码函数


现在的程序应该将y值绘制为Zeta的函数,Zeta随能量变化。

您不需要将循环置于函数中,只需将其置于脚本的顶层即可。并使用
y.append()
E.append()
添加到这些列表中

for i in range(1, 83):
    alpha = cmath.sqrt(2*m*(E[i-1]+Vo)/(hbar**2))
    zeta = alpha*a
    eta = cmath.sqrt(k - zeta**2)
    y.append(zeta*cmath.tan(zeta) - eta)
    E.append(E[i-1] + 1)

除了@Barmar的答案外,您的
k
变量需要是
k
(大写)


此外,也不需要使用
append
,因为有时
append
并不总是能很好地用于计算索引查找。您最好先将
y
E
列表初始化为循环的长度。

您从不调用
variables()
函数。您不能通过分配索引来创建新的列表元素,您必须使用
append()
。注意,您从未实际调用函数
variables()
。但我还要指出,按照目前编写代码的方式,没有很好的理由来定义函数。首先尝试在没有函数定义的情况下让代码正常工作,然后,如果需要的话,您可以在以后担心如何将其泛化以供进一步使用。
for i in range(1, 83):
    alpha = cmath.sqrt(2*m*(E[i-1]+Vo)/(hbar**2))
    zeta = alpha*a
    eta = cmath.sqrt(k - zeta**2)
    y.append(zeta*cmath.tan(zeta) - eta)
    E.append(E[i-1] + 1)
import cmath

import matplotlib.pyplot as plt

a = 2*10**-15
Vo = 83*10**6
m = 1.6726*10**(-27)
pi = cmath.pi
E = [0] * 83
E.append(-83*10**6)
hbar = 6.62607015*10**(-34)/ pi
K = 16.032280*10**6
y = [0] * 83
y.append(51311.18131)

for i in range(1, 83, 1):
    alpha = cmath.sqrt(2*m*(E[i-1]+Vo)/(hbar**2))
    zeta = alpha*a
    eta = cmath.sqrt(K - zeta**2)
    y[i] = zeta*cmath.tan(zeta) - eta
    E[i] = E[i-1] + 1

print('E = ', E, 'Y = ', y)
plt.plot(E, y)