首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复列表的for循环

如何修复列表的for循环
EN

Stack Overflow用户
提问于 2019-10-10 06:49:52
回答 2查看 47关注 0票数 0

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

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

screenshot

代码语言:javascript
复制
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的函数,Zeta随能量而变化。

EN

回答 2

Stack Overflow用户

发布于 2019-10-10 06:56:30

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-10-10 07:05:04

除了@Barmar的答案之外,您的k变量还需要为K (大写)。

代码语言:javascript
复制
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列表初始化为循环的长度可能会更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58313260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档