我在编程方面并不擅长,而且我一直在疯狂地试图解决这个问题。
我有一个程序来计算在列表中存储值的绑定能量。在某个时刻,一个列表被一个不同的列表划分,但我不断收到此错误:
Traceback (most recent call last):
File "semf.py", line 76, in <module>
BpN = BpN(A, Z)
File "semf.py", line 68, in BpN
bper = B[i]/A[i]
IndexError: list index out of range
相关的代码如下,对不起有这么多:
A = 0.0
def mass_A(Z):
"""
ranges through all A values Z, ..., 3Z+1 for Z ranging from 1 to 100
"""
a = 0.0
a = np.arange(Z, 3*Z+1)
return a
def semf(A, Z):
"""
The semi-empirical mass formula (SEMF) calculates the binding energy of the nucleus.
N is the number of neutrons.
"""
i = 0
E = []
for n in A:
# if statement to determine value of a5
if np.all(Z%2==0 and (A-Z)%2==0):
a5 = 12.0
elif np.all(Z%2!=0 and (A-Z)%2!=0):
a5 = -12.0
else:
a5 = 0
B = a1*A[i] - a2*A[i]**(2/3) - a3*(Z**2 / A[i]**(1/3)) - a4*( (A[i] - 2*Z)**2 / A[i] ) + a5 / A[i]**(1/2)
i += 1
E.append(B)
return E
def BpN(A, Z):
"""
function to calculate the binding energy per nucleon (B/A)
"""
i = 0
R = []
for n in range(1,101):
bper = B[i]/A[i]
i += 1
R.append(bper)
return R
for Z in range(1,101):
A = mass_A(Z)
B = semf(A, Z)
BpN = BpN(A, Z)
似乎不知何故,两个名单A和B的长度不一样,但我不确定如何解决这个问题。
请帮忙。
由于
答案 0 :(得分:1)
在Python中,列表索引从零开始,而不是从一开始。
如果没有完整地看到您的代码,很难确定,但range(1,101)
看起来很可疑。如果列表包含100个元素,则循环的正确边界为range(0,100)
或等效range(100)
,或者更好,range(len(A))
。
P.S。由于您已经在使用Numpy,因此您应该考虑使用Numpy数组重写代码,而不是使用列表和循环。如果A
和B
是Numpy数组,那么整个麻烦的函数可能会变成:
return B / A
(这是B
A
的元素划分。{/ p>