基本上我想要做的是實現依賴關係解析算法。從文本輸入創建對象及其引用,而不會丟失信息
假設我有類似下面的列表:
package1:
package2: package1
package3: package1, package2
package4: package1
package5: package1, package2
基本上,package1
僅僅依賴自身,package2
取決於package1
,package3
取決於1和2,依此類推。
我做了什麼直到現在如下:
- 首先,我打開包含列表
- 二讀每一個文件的Word中的文件,把它在列表上
- 三,我的列表內進入,如果該元素與
:
結束我創建一個對象以他的名字(意味着它的一個包中)
假設我與列表運行程序上面時,輸出是等這樣的:
<__main__.Node object at 0x100740ac8>
<__main__.Node object at 0x100740b00>
None
<__main__.Node object at 0x100740ac8>
None
None
<__main__.Node object at 0x100740b00>
None
<__main__.Node object at 0x100740ac8>
None
None
在哪裏建立新的包對象的工作很好,因爲我們可以看到有物體,但在這裏我引用與主包的依賴關係的部分出現故障,因爲它顯示None
的一部分,這是不正確。
爲了正確,輸出應該像下面
package1
package2
package1
package3
package1
package2
package4
package1
package5
package1
package2
我認爲這是我正在做的錯誤是這樣的部分:
f = open('data.txt','r')
text = []
resolved = []
unresolved = []
for line in f.readlines():
for char in line.split():
text.append(char)
class Node:
def __init__(self, name):
self.name = name
self.edges = []
def addEdge(self, node):
self.edges.append(node)
def dep_resolve(self, resolved, unresolved):
unresolved.append(self)
print (self.name)
for edge in self.edges:
if edge not in resolved:
if edge in unresolved:
raise Exception('Circular')
edge.dep_resolve(resolved, unresolved)
resolved.append(self)
unresolved.remove(self)
global flag
for i in range(len(text)):
if text[i].endswith(':'):
newstr = text[i].replace(':', '')
newstr = Node(newstr)
flag = newstr
print(flag.name)
else:
flag.addEdge(text[i])
print(flag.addEdge(text[i]))
,特別是else
哪裏我引用str
類型的對象,而我應該引用Node
類型的對象,但我不知道如何解決該問題。
如果你需要更多的代碼我就會把它
你似乎至少有兩個問題在這裏。首先,你打印出'<__ main __。Node object in 0x100740ac8>'你想要'package1'的地方,大概是因爲你要麼缺少'__str__'或'__repr__'方法,或者忘記了'.name'屬性。其次,你要在第二個'package'的地方打印'None',大概是因爲一些引用是錯誤的。你需要哪一個幫助? – abarnert
第二個!我知道我正在打印'''<__ main __。0x100740ac8>的節點對象'''但它只是顯示對象,所以如果你能幫我解決第二個問題,我將不勝感激! – BioShock
無論如何,請不要給我們一段代碼,而是讓我們猜測輸入和上下文的其他部分,請給我們一個[最小,完整,可驗證的例子](http://stackoverflow.com/help/) mcve) - 我們可以運行一些東西,看看有什麼不對。這可能意味着一行6行精簡的'None'類和'text'列表的值以及有關'flag'的東西被刪除,因爲它不相關,但很難猜測。 – abarnert