【问题标题】:If else if else conditional loop in pythonPython中的if else if else条件循环
【发布时间】:2015-01-16 02:21:36
【问题描述】:

我在分子组 1 中给出了一组分子,我想通过我的函数将分子移动到其他新的空分子组 2。它只将一个分子添加到空的分子组 2 中。每当我上传任何包含一个或多个分子的分子组时,它总是打印“排序的前五个分子存在于新组中”而不添加分子。此外,如果由于公差标准未添加分子,那么我如何使函数再次运行,直到成功添加分子。

def initial_configurations(newemptygroup,backgroundmols,tolerance,boxspace):
    p = PointRef(backgroundmols.molecule().evaluate().centerOfGeometry())
    c = CloseMols(p,newemptygroup,5)
    g_random = c.closeMolecules()
    if len(g_random) == 0:
        newemptygroup.add(backgroundmols)
        print("first molecules to be added")
    else:
        g = sorted(g_random.items(), key=operator.itemgetter(1)) # sort the dict by value which give tuple
        print("sorted first five  molecules present in newgroup =%s" %g)
        t = [x[0] for x in g]
        selected = newemptygroup[t[0]].molecule().evaluate().centerOfGeometry()
        for i in range(1,len(t)):
            closemols = newemptygroup[t[i]].molecule().evaluate().centerOfGeometry()
            if (selected-closemols).length() > tolerance:
                newemptygroup.add(backgroundmols)
            else:
                print("not added")           
    return newemptygroup

【问题讨论】:

    标签: python python-2.7 python-3.x ipython


    【解决方案1】:

    你可以在 newemptygroup.add(backgroundmols) 之后插入一个 break 语句

    ...
    if (selected-closemols).length() > tolerance:
      newemptygroup.add(backgroundmols)
      break
    else:
      print("not added")   
    ...
    

    这假设您会在 for 循环中的某个时间找到正确的 backgroundmol。

    【讨论】:

    • 它没有添加。仍然是相同的打印消息。
    • 是否可能没有具有适当容错能力的元素?
    • 是的。取决于随机数生成器来放置分子。
    猜你喜欢
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多