我得到以下元組:(12, (6, (2,), (8,)), (15, (14,), (18,))) 并且我需要以以下形式回傳 Tree 的實體: 樹(12, 樹(6, 樹(2), 樹(8)), 樹(15, 樹(14), 樹(18)))
我的課是:
class Tree():
def __init__(self, entry, left=None, right=None):
self.entry = entry
self.left = left
self.right = right
def __repr__(self):
if not self.left and not self.right:
return "Tree({0})".format(repr(self.entry))
return "Tree({0},{1},{2})".format(repr(self.entry),repr(self.left),repr(self.right))
我無法理解的問題是為什么它沒有進入基本條件?以及如何修復該功能。
我做的功能是:
def build_tree(tree):
if type(tree) != tuple:
return Tree(tree)
return Tree(tree[0], build_tree(tree[1]), build_tree(tree[2]))
激活是:
tree1 = (12, (6, (2,), (8,)), (15, (14,), (18,)))
t1=build_tree(tree1)
print(t1)
uj5u.com熱心網友回復:
由于最里面的元組只有一個成員,因此避免使用超出范圍的索引,只需將節點值之后的元組成員切掉,并將它們映射到您的函式。
因此return,將函式中的最后一條陳述句替換為build_tree:
return Tree(tree[0], *map(build_tree, tree[1:]))
uj5u.com熱心網友回復:
問題是tree[1]并且tree[2]有時對于諸如(2,)或之類的條目未設定(8,)。這將導致一個IndexError. 一種解決方法是用(None, None)值“填充”元組,然后修剪到 3 個元素 -
def build_tree(a):
if a:
(entry, left, right) = (a (None, None))[:3]
return Tree(entry, build_tree(left), build_tree(right))
else:
return None
x = (12, (6, (2,), (8,)), (15, (14,), (18,)))
mytree = build_tree(x)
print(mytree)
Tree(12,Tree(6,Tree(2),Tree(8)),Tree(15,Tree(14),Tree(18)))
我將評論一個帶有瘦類包裝器的函式式方法將使您更容易擴展樹的功能。有關此技術的更多資訊,請參閱此相關問答。
uj5u.com熱心網友回復:
你要 isinstance
def build_tree(tree):
if isinstance(tree, tuple):
if len(tree) == 1:
return Tree(tree[0])
return Tree(tree[0], build_tree(tree[1]), build_tree(tree[2]))
return Tree(tree)
print(build_tree((12, (6, 2, 8), (15, 14, 18))))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411307.html
標籤:
下一篇:遞回顯示所有可能的結果
