评估列表的长度,如果等于长度,则创建一个新列表并填充它,从而导致列表具有累积长度

时间:2018-11-04 20:29:53

标签: python oop

我正在为计算集群制作安装程序。其中群集由三个类组成,一个群集,一个机架和一个节点。

集群中包含一组机架,而机架中包含一组节点。到目前为止,我已经找到并完成了大多数我想拥有的方法,但是其中一种方法应该检查机架是否可以容纳节点,如果可以,请将该节点添加到机架列表中。请参阅以下代码

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)

0 个答案:

没有答案