Я делаю домашнюю работу и мне нужно вернуть дерево в виде строки. Я решил проблему, и когда я печатаю, все в порядке. Проблема в том, что домашняя работа просит вернуть строку, и когда я возвращаюсь, она печатает /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)) )
Как я могу вернуть формат строки как в распечатке?