半经验质量公式

时间:2016-09-18 23:10:13

标签: python physics

我是编码的新手,我在计算物理课上得到了这个任务:class assignment

这是我为它制作的代码:

A = int(input("please enter the atomic mass"))
Z = int(input("please enter the atomic number"))

def semi_empirical_mass_formula(A,Z):

    a1 = 15.8
    a2 = 18.3
    a3 = 0.714
    a4 = 23.2
    afive = [-12.0,12.0,0.0]

    if A%2 == 0 and Z%2 != 0:
        a5=afive[0]

    if A%2 and Z%2 == 0:
        a5=afive[1]

    if A%2 != 0:
        a5=afive[2]


    return (a1*A-a2*A**(2/3))-((a3*Z**2)/A**(1/3))-((a4*(A-2*Z)**2)/A)+((-12.0)/A**(1/2))

print (semi_empirical_mass_formula(A,Z))

正如您可能看到的,它不起作用,我不知道为什么它给我的答案是324.724。答案应该是~500

我对学习很感兴趣,我的教授鼓励我们向像这样的编码员社区提问。请包括如何解决它的说明。最后一部分将使我受益匪浅,因为我对编码非常缺乏经验。

编辑:我也使用“//”作为分区,当我这样做时它给出的答案是326.1

1 个答案:

答案 0 :(得分:0)

您可能在 4.5 年后仍然不需要这个,但是对于目前遇到此问题并正在寻求帮助的任何其他人,这是我为回答练习 2.10 a 所做的工作。物理学家的 Python 编程(有时也称为计算物理学),作者为 Mark Newman。

A = float(input("Please enter the atomic mass number "))
Z = float(input("Please enter the atomic number "))

a1 = 15.8
a2 = 18.3
a3 = .714
a4 = 23.2

if A % 2 == 1:
    a5 = 0
elif A % 2 == 0 and Z % 2 == 0 :
    a5 = 12.0
else:
    a5 = -12.0
    
B = a1*A - a2*(A**(2/3)) - a3*(Z**2)/(A**(1/3)) - a4*((A-2*Z)**2)/A + a5/(A**(1/2))

print("The nuclear binding energy is: ", round(B, 2))