#python #python-3.x #function #if-statement #rdkit
#питон #python-3.x #функция #if-оператор #rdkit
Вопрос:
У меня есть этот фрагмент кода, который на самом деле не хочет работать. Я уже пытался использовать Global, но это выдало мне другую ошибку error (она говорит мне, что ff_cog не определен таким образом), я попытался изменить позицию «numat», которая раньше была над оператором if, но ничего не изменилось. Может кто-нибудь мне помочь, пожалуйста? Я на 100% уверен, что есть valuee больше, чем dp. Этот оператор if следует использовать для выбора наименьшего расстояния между всеми атомами, когда они вычисляются. Я не могу понять, почему это создает у меня такую проблему. Я использую аналогичный цикл for еще два раза в своей программе, и, кажется, он работает просто отлично. Это первый раз, когда я сталкиваюсь с этой ошибкой. заранее большое спасибо
def ff(furthestcoord):
#global ff_cog
numat=0
dp=np.zeros(0)
for atom in mol.GetAtoms():
atom_pos=np.array(mol.GetConformer().GetAtomPosition(numat))
ffdist=np.array(np.linalg.norm(furthestcoord-atom_pos))
print("this is ffdist",ffdist)
if ffdist > dp:
dp = atom_pos
ff_cog = atom_pos
else: pass
numat =1
return ff_cog
``
Ответ №1:
if ffdist > dp:
dp = atom_pos
ff_cog = atom_pos
Если условие этого оператора if не выполняется, то ff_cog
он никогда не будет инициализирован. Вот почему вы получаете эту ошибку. Вы можете попробовать инициализировать ff_cog
начальное значение, чтобы избежать ошибки.
Вы можете сделать что-то вроде ff_cog = 0
или ff_cog = None
в начале вашей функции.
Комментарии:
1. хорошо, я
ll Try asap, but the problem is that I
возвращаю ff_cog вне цикла for, поэтому технически он должен дать мне последний сохраненный ff_cog (который меня интересует, поскольку он должен иметь более высокое значение). я прав?2. @DavideAnnese если это условие
ffdist > dp
выполняется хотя бы один раз, то все в порядке. Но, если это условие никогда не выполняется, тогда не будет «последнего ff_cog».3. хорошо, мне удалось заставить это работать, проблема заключалась в том, что после оператора if в первой строке, если оператор удовлетворен, я выполнял
dp = atom_pos
, но правильная форма — этоdp=ffdist
потому, что я хочу, чтобы она была сохранена и сравнивалась с ffdist, созданным на последовательном атоме.