в моем домашнем задании говорится следующее:
До c) мой код работает, я пробовал с разными значениями Z. Вот мой код:
# This program calculates the mass number for which the binding energy per nucleon is max for a given atomic number.
import math
from math import *
import numpy as np
from numpy import *
# First we define some variables
a_1 = 15.67
a_2 = 17.23
a_3 = 0.75
a_4 = 93.2
# We ask for input Z
Z = float(input("Enter the atomic number: "))
list_B = []
list_A = []
list_B_A = []
# We set up the loop
for A in arange(Z,3*Z+1): #we make A run from Z to 3Z
list_A.append(A)
if (A%2)==0:
if ((A+Z)%2)==0:
a_5 = 12.0
else:
a_5 = -12.0
else:
a_5 = 0
B = a_1*A - a_2*(A**(2/3)) - a_3*(Z**2)/(A**(1/3)) - a_4*((A-2*Z)**2)/A + a_5/(A**(1/2))
B_A = B/A #We print the resulting value of B
list_B.append(B)
list_B_A.append(B/A) #We make a list with this values
print("The Mass number for the maximum binding energy is: ",list_A[list_B_A.index(max(list_B_A))])
Теперь, когда я пытаюсь сделать d), он не работает и для значений больше z = 24 он всегда дает A max = 50, что не то, что дает первый код меня. Например, когда я запускаю код для c), Z = 28 дает мне A max = 58. Но когда я запускаю код для d), когда Z достигает 24, он всегда возвращает 50.
import math
from math import *
import numpy as np
from numpy import *
# First we define some variables
a_1 = 15.67
a_2 = 17.23
a_3 = 0.75
a_4 = 93.2
# We ask for input Z
list_B = []
list_A = []
list_B_A = []
for Z in arange(1,101,1):
for A in arange(Z,3*Z+1): #we make A run from Z to 3Z
list_A.append(A)
if (A%2)==0:
if ((A+Z)%2)==0:
a_5 = 12.0
else:
a_5 = -12.0
else:
a_5 = 0
B = a_1*A - a_2*(A**(2/3)) - a_3*(Z**2)/(A**(1/3)) - a_4*((A-2*Z)**2)/A + a_5/(A**(1/2))
B_A = B/A #We print the resulting value of B
list_B.append(B)
list_B_A.append(B/A) #We make a list with this values
print("The Mass number for the maximum binding energy is: ",list_A[list_B_A.index(max(list_B_A))], "given the atomic number :", Z)