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

4

在 IDLE 设置中使用等宽字体,一切都很好。

于 2013-10-07T03:32:41.587 回答
3

使用等宽字体作为@Kable 回答。

除此之外,最后一个printprint 1 less 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 回答