【发布时间】:2015-08-05 22:22:03
【问题描述】:
基本上我要做的是实现一个依赖解析算法。
假设我有一个如下列表:
package1:
package2: package1
package3: package1, package2
package4: package1
package5: package1, package2
基本上,package1 只依赖于自身,package2 依赖于package1,package3 依赖于 1 和 2,依此类推。
到目前为止,我所做的如下:
- 首先,我打开包含列表的文件
- 第二次读取文件的每个单词,将其放在一个列表中
- 第三,我在列表中输入,如果元素以
:结尾,我用他的名字创建一个对象(意味着它是一个包)
假设我用上面的列表运行程序,输出是这样的:
<__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 类型的对象,但我不知道如何修复它。
如果你需要更多的代码,我会放上去
【问题讨论】:
-
你这里似乎至少有两个问题。首先,您在想要
package1的地方打印出<__main__.Node object at 0x100740ac8>,可能是因为您缺少__str__或__repr__方法,或者在某处忘记了.name归属。其次,您打印出None,您想要第二个package,大概是因为某些引用是错误的。您需要哪方面的帮助? -
第二个!我知道我正在打印
<__main__.Node object at 0x100740ac8>,但这只是为了表明它们是对象,所以如果你能帮助我解决第二个问题,我将不胜感激! -
无论如何,不要只给我们一段代码,让我们猜测输入和上下文的其余部分,请给我们一个minimal, complete, verifiable example——我们可以运行它来看看是什么错误的。这可能只是意味着一个 6 行的精简
None类和一个text列表的值以及关于flag的内容被剥离,因为它不相关,但很难猜测。 -
@abarnert 输入和以前一样,我只是把整个代码放好,这样如果我犯了错误更容易理解!感谢您的宝贵时间!
-
整个代码仍然不是最小的、完整的、可验证的例子,因为它绝对不是最小的。
标签: python algorithm oop python-3.x dependencies