1

私はPythonの初心者で、このプログラムで問題が発生しています:

最初の NodeList は次のとおりです。

class Node:
    def __init__(self,initdata):
        self.data = initdata
        self.next = None

    def getData(self):
        return self.data

    def getNext(self):
        return self.next

    def setData(self,newdata):
        self.data = newdata

    def setNext(self,newnext):
        self.next = newnext

私の問題はこのプログラムにあります: (印刷)

from NodeList import Node

class StackLL:

    def __init__(self):
        self.head = None

    def pushSLL(self,item):
        temp = Node(str(item))
        temp.setNext(self.head)
        self.head = temp
        node = self.head
        print(chr(0x2510)+(chr(0x0000)*(len(item)))+chr(0x250c))
        while node!=None:
            stackeditem = chr(0x2502)+node.data+chr(0x2502)
            print(stackeditem)
            node = node.next   
        print(chr(0x2514)+(chr(0x2500)*(len(item)-1))+chr(0x2518))

ここに出力があります

印刷するたびに、線がずれているように見えます。正確にするために len() を使用して実験しようとしましたが、アイテムが文字を追加するたびに、再び外れます。どんな助けでも大歓迎です。ありがとうございました。

4

2 に答える 2

3

@Kableが答えたように等幅フォントを使用してください。

それに加えて、最後のprint印刷は 1 つ少なくなりchr(0x2500)ます。

その他の注意事項:

  • \u2502の代わりに使用しchr(0x2502)ます。
  • からダンプ機能を分離しpushSLLます。
  • 最初と最後の出力では、現在のノードの長さのみが考慮されます。すべてのノードの最大長を計算する必要があります。

class StackLL:

    def __init__(self):
        self.head = None

    def pushSLL(self, item):
        temp = Node(str(item))
        temp.setNext(self.head)
        self.head = temp

    def dump(self):
        length = max(len(node.data) for node in self.allNodes()) if self.head else 0
        print('\u2510{}\u250c'.format(' '*length))
        for node in self.allNodes():
            print('\u2502{:<{}}\u2502'.format(node.data, length))
        print('\u2514{}\u2518'.format('\u2500'*length))

    def allNodes(self):
        node = self.head
        while node is not None:
            yield node
            node = node.next

s = StackLL()
s.pushSLL('Arc')
s.pushSLL('Circle')
s.pushSLL('Rect')
s.dump()

出力

于 2013-10-07T04:04:31.610 に答える