Оценивая длину списка, и, если она равна длине, создайте новый список и заполните его, приводя к списку с накопленной длиной - PullRequest
0 голосов
/ 04 ноября 2018

Я делаю программу установки для вычислительного кластера. Где кластер состоит из трех классов, кластера, стойки и узла.

В кластере находится набор стоек, а в стойке - набор узлов. До сих пор я обнаружил и сделал большинство методов, которые я хочу иметь, однако один из методов должен проверить, может ли стойка содержать узел, и если да, добавить узел в список стойки. Смотрите следующий код

from node import Node
from rack import Rack


class Cluster:


    def __init__(self, noderPerRack, racks):
        self.noderPerRack = nodesPerRack
        self.racks = []

        if len(self.racks) == 0:
            newRack= Rack()
            self.racks.append(nyRack)


    def insertInto(self, node):

        for rack in self.racks:

            if rack.getNodes() < self.nodesPerRack:

                rack.insertInto(node)

                print(rack.getNodes())

            elif rack.getNodes() == self.nodesPerRack:

                print("Amount of racks", len(self.racks))

                self.racks.append(Rack([]))

Желаемое поведение выглядит следующим образом:

Если в стойку добавлено менее двенадцати узловых объектов, она будет добавлять узлы, пока в стойке не будет двенадцать узлов. Если в стойке двенадцать узлов, она создаст новую стойку, добавит себя в список, который обрабатывает стойки, который является списком:

self.racks

Однако, когда я пишу код и выполняю его, он успешно добавит двенадцать узлов к самой первой стойке в соответствии с желаемым поведением, но когда будет создана новая стойка, он примет только один узел, а затем создаст новую стойку , последующая стойка примет 2 узла и пр. Даже при том, что у меня есть проверка, которая должна проверить, равна ли она двенадцати (то есть self.nodesPerRack), вывод выглядит следующим образом:

1
2
3
4
5
6
7
8
9
10
11
12
Amount of racks 1
1
Amount of racks 2
2
1

Почему это происходит? И как это можно исправить? Я попытался использовать другие операторы управления, такие как цикл while таким образом

while rack.getNodes() < self.nodesPerRack:
    rack.insertInto(node)

Что просто ведет к вечно работающему циклу, хотя в одной точке значение

rack.getNodes()

будет больше

self.nodesPerRack

Кроме того, вот соответствующие детали для класса Rack:

from node import Node


class Rack: 

    def __init__(self, nodes):
        self.nodes = []

    def insertInto(self, node):
        self.nodes.append(node)

    def getNodes(self):
        nodecounter = 0
        for i in range(len(self.nodes)):
            nodecounter += 1
        return nodecounter

Вот код для класса Node:

    class Node:

    def __init__(self, minne, antPros):
        self.minne = minne
        self.antpros = antPros

    def antPros(self):
        return self.antpros

    def nokminne(self, paakrevetMinne):
        if self.minne >= paakrevetMinne:
            return True
        else:
            return False

и эта программа используется для проверки классов

from node import Node
from rack import Rack
from cluster import Cluster


    cluster = Cluster(12, [])


    for i in range(14):
        newNode = Node(64,1)
        cluster.insertInto(newNode)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...