1

私はlen関数を機能させることができないようです.私はたくさんのことを試してきましたが、私は完全な初心者なので、完全に明らかな何かが欠けていると確信しています. これは私のコードです...

 def __len__(self):
    if self.head is None:
        return 0
    else:
        return self.size

この背後にある私の考えは単純です。双方向リンク リストの先頭が None の場合、空でなければならないので 0 を返します。それ以外の場合は、リストのサイズを返します。

ただし、アサーションエラーが発生します...

AssertionError: List should contain 1 element, but length is 0

事前に感謝します。

編集:これは私の機能を実行しているコードです...

testList.add(14)
assert len(testList) == 1, "List should contain 1 element, but length is %r" % len(testList)

EDIT2:これは私の追加機能です。私はそれが正しいと確信しています。私はそれに2時間を費やしています...

def add(self, value):
    newNode = DoubleListNode(value)
    if self.head is None:
        self.head = newNode
        self.tail  = newNode
        newNode.prev = None
        newNode.next = None
        return newNode
    elif value < self.head.data:
        self.head = newNode
        newNode.next = self.head
        newNode.prev = None
        return newNode
    elif value > self.tail.data:
        self.tail = newNode
        newNode.prev = self.tail
        newNode.next = None
        return newNode
    else:
        node = self.head
        node2 = node
        while node is not None and node.data < value :
            node = node.next
            node2 = node.prev
        newNode.next = node.prev
        newNode.prev = node2.next
        return newNode
4

1 に答える 1

1

あなたのadd関数には、増加するものは何もありませんself.size。したがって、 で設定したものは何でも__init__、これはおそらく0です。

そのため、リストが実際に空の場合は is であるため、__len__戻ります。0self.headNone

また、要素を追加した後も、is0あるため、返されます。self.size0


また、コードには少なくとも 1 つの他の問題があります。これを見てください:

elif value > self.tail.data:
    self.tail = newNode
    newNode.prev = self.tail
    newNode.next = None
    return newNode

明らかにnewNode.prev、前のテールではなく、それ自体を指すことになります。

コードの正しさを判断するのに役立つものはたくさんあります — 単体テスト、コードに携わっていない人によるコード レビュー、インタラクティブなビジュアライザーを使ったステップ実行、正式な証明などです。それはそれらのものの1つではありません。

于 2013-03-29T01:20:55.757 に答える