Бесконечный l oop во вложенном цикле while и for - PullRequest
0 голосов
/ 25 января 2020

Код предназначен для генерации положения шариков 3d-полимера. Это входит в бесконечное l oop. Я не мог понять ошибку.

import numpy as np
import math as m

atoms = 249
pos = [[]]
sigma = 1.0
pos[0] = [0, 0, 0]

for p in range(atoms):
    md = 0.0
    c = 0
    n = p

    while md < sigma:
        rnd_vector = (2 * (np.random.rand(3))) - [1, 1, 1]
        rnd_vector = np.round(rnd_vector, 6)

        d = m.sqrt(sum(map(lambda x: x * x, rnd_vector)))

        rnd_vector = [x / d for x in rnd_vector]

        next_pos = [pos[p][x] + rnd_vector[x] for x in range(3)]

        c += 1

        for i in range(n):
            temp = [rnd_vector[x] - pos[i][x] for x in range(3)]
            td = m.sqrt(sum(map(lambda x: x * x, temp)))

            if i == 0:
                md = td

            if td < md:
                md = td

    pos.append(next_pos)

1 Ответ

3 голосов
/ 25 января 2020

Трудно сказать, не зная, что именно должна делать программа, однако причина бесконечного l oop заключается в том, что на самой первой итерации, когда n=p=0, самый внутренний l oop равен никогда не выполняется и, таким образом, md никогда не обновляется.

Если вы измените внутренний l oop на for i in range(n+1):, то программа в конечном итоге завершится, хотя я не могу сказать, выполняет ли она все еще то, что предполагается делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...