Python:使用ascii代码打印

时间:2013-10-07 03:28:12

标签: python python-3.x ascii

我是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))

here's the output

每次我打印时,线条似乎都没有了。我尝试使用len()进行实验只是为了使其准确,但每次项目添加更多字符时它会再次出现。任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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()

output