如何修复列表循环

时间:2019-10-09 22:49:51

标签: python list function math

我正在尝试将y创建为数组,以创建一个遍历zeta的函数,该函数全部使用for循环依赖于E。但是,这些值并未添加到列表中。

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

screenshot

import cmath

import matplotlib.pyplot as plt

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

def variables(y, E):
    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
    return y, E
print('E = ', E, 'Y = ', y)
plt.plot(E, y)

到目前为止,该程序应将y值绘制为Zeta的函数,并随着能量的变化而变化。

2 个答案:

答案 0 :(得分:1)

您不需要将循环放入函数中,只需将其放在脚本的顶层即可。并使用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)

答案 1 :(得分:0)

除了@Barmar的答案,您的k变量还必须为K(大写)。

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)

也不需要使用append,因为有时append不适用于计算的索引查找。最好将yE列表初始化为循环的长度。