基本上我要做的是实现依赖性解析算法。
假设我有一个如下列表:
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
的对象,但我不知道如何修复它。 / p>
如果您需要更多代码,我会把它放在
答案 0 :(得分:1)
我不明白你的代码应该如何工作,因为有许多部分没有意义。但是,我可以解释一下这个:
您打印None
的原因是:
flag.addEdge(text[i])
print(flag.addEdge(text[i]))
第一次拨打addEdge
。
第二次再次调用addEdge
,这似乎是错误的,print
是它的返回值。由于它没有return
语句,因此该值为None
。
我认为你想要的是:
flag.addEdge(text[i])
print(text[i])
同时
...我引用了str类型的对象,而我应该引用类型
Node
的对象,但我不知道如何解决它
如果你只想在这里创建一个Node
对象,你可以像之前几行一样做到这一点:
new_node = Node(text[i])
flag.addEdge(new_node)
print(new_node)
我不确定会给你带来什么,但它会解决你所描述的问题。
答案 1 :(得分:0)
您使用Intent intent = Games.TurnBasedMultiplayer.getInboxIntent(getApiClient());
startActivityForResult(intent, RC_LOOK_AT_MATCHES);
不一致。
看看这部分:
nexstr
使用newstr = text[i].replace(':', '')
newstr = Node(newstr)
flag = newstr
print(flag.name)
您实际指定newstr = text[i].replace(':', '')
。
然后使用空字符串newstr = ''
实例化Node作为参数,并再次将其分配给''
,因此newstr
引用一个对象(Node类),而不是字符串。
比将此对象重新分配给newstr
首先,确保flag
确实包含您想要的内容。
然后
newstr
应该工作(我还没有测试过它)