gpt4 book ai didi

python - 在不丢失信息的情况下从文本输入创建对象及其引用

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:23:02 28 4
gpt4 key购买 nike

基本上我想做的是实现一个依赖解析算法。

假设我有如下列表:

package1:
package2: package1
package3: package1, package2
package4: package1
package5: package1, package2

基本上,package1只依赖于它自己,package2依赖于package1package3依赖于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 类型的对象,但是我不知道如何修复它。

如果你需要更多的代码我会把它放在

最佳答案

我不明白你的代码应该如何工作,因为有很多部分没有意义。不过,我可以解释这么多:

你打印出 None 的原因是:

flag.addEdge(text[i])
print(flag.addEdge(text[i]))

第一个调用 addEdge

第二个再次调用addEdge,这似乎是错误的,并且print是它的返回值。因为它没有 return 语句,所以该值为 None

我想你想要的是:

flag.addEdge(text[i])
print(text[i])

同时:

… i reference to an object of type str while i should reference to an object of type Node but i have no idea how to fix it

如果你只是想在这里创建一个 Node 对象,你可以像前面几行那样做:

new_node = Node(text[i])
flag.addEdge(new_node)
print(new_node)

我不确定这会给你带来什么,但它会解决你描述的问题。

关于python - 在不丢失信息的情况下从文本输入创建对象及其引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30421356/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com