2013-10-07 42 views
1

我在python初學者,我有這個程序有問題:的Python:使用打印的ASCII碼

這裏的節點列表第一:

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()來試驗它,但每次該項目添加更多字符時,它都會再次出現。任何幫助將不勝感激。謝謝。

+0

從你的照片看起來,無論GUI你必須使用[比例字體(http://en.wikipedia.org/wiki/Proportional_font#Proportion)。您將很難通過添加空格來調整字符串的寬度。使用等寬字體。 – fjarri

回答

2

使用等寬字體作爲@Kable回答。

除此之外,最後的print print 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() 

output

4

在IDLE設置中使用等寬字體,你都很好。