Как вернуть строку без / n, как печатать - PullRequest
0 голосов
/ 08 июля 2019

Я делаю домашнюю работу и мне нужно вернуть дерево в виде строки. Я решил проблему, и когда я печатаю, все в порядке. Проблема в том, что домашняя работа просит вернуть строку, и когда я возвращаюсь, она печатает /n символов, не считая их новой строкой.

Если я напечатаю это, это будет результат:

04  
|
05  
|   
01  
|   
06  
|   
03  

И это должна быть строка, которую я должен вернуть.

Но если я использую возврат вместо печати, он возвращает это:

04  \n  |   \n  05  \n  |   \n  01  \n  |   \n  06  \n  |   
\n  03

Я использую этот класс:

class Albero:

  def __init__(self,V):

     self.id=V
     self.f=[]


  n=Albero("04")
  n1=Albero("05")
  n2=Albero("01")
  n3=Albero("06")
  n4=Albero("03")
  n.f=[n1]
  n1.f=[n2]
  n3.f=[n4]

 def treeLines(node,getInfo):
    nodeId,nodeChildren = getInfo(node)
    subNodes   = [treeLines(child,getInfo) for child in nodeChildren]
    widths     = [ len(childText[0]) for childText in subNodes ]
    totalWidth = sum(widths) + 2*len(widths) - 1
    totalWidth = max(totalWidth,len(nodeId))
    nodeLine   = nodeId.center(totalWidth," ")
    result     = [nodeLine]
    if not nodeChildren: return result
    linksLine   = "  ".join("|".center(width," ") for width in widths)
    linksLine   = linksLine.center(totalWidth," ")
    leftIndent  = linksLine.index("|") + 1
    rightIndent = linksLine[::-1].index("|") + 1
    spanWidth   = totalWidth - leftIndent - rightIndent - 1
    leftSpan    = nodeLine.index(nodeId)-leftIndent+(len(nodeId)-1)//2
    rightSpan   = spanWidth - leftSpan   
    spanLine    = " "*leftIndent + "_"*leftSpan + "|" + "_"*rightSpan + " "*rightIndent
    if len(nodeChildren) > 1 : result.append(spanLine)
    result.append(linksLine)
    maxHeight   = max(len(subNode) for subNode in subNodes)
    subNodes    = [ subNode + [" "*len(subNode[0])]*(maxHeight-len(subNode)) for subNode in subNodes ]
    result     += ["  ".join([subNode[i] for subNode in subNodes]).center(totalWidth," ") for i in range(maxHeight) ]
    return result  

def treeText(node,getInfo): return  "\n".join(treeLines(node,getInfo))

print( treeText(Albero.radice,lambda n:(n.id,n.f)) )

Как я могу вернуть формат строки как в распечатке?

...