gpt4 book ai didi

python 根据二叉树检查值,空输出

转载 作者:行者123 更新时间:2023-12-01 05:36:22 24 4
gpt4 key购买 nike

这个问题已经被困扰很长时间了,是时候寻求一些帮助了。几乎一切都有效。它读取文件并输入数据等等。程序没有给我任何输出,最后的 if 语句有问题。最后三行是

root1.put(word1)
if root.exists(word1):
print(word1, end = " ")

它将值放入树中。然后它将对照第一棵树检查值“word1”是否已经在该树中,如果是的话,它将打印出该单词,如果不是继续。这个程序只给我一个空的输出。有人有机会看到这个问题吗?另一个类文件看起来几乎相同,只是所有变量/参数都没有 1..

类文件(root1)

class BintreeEN:
def __init__(self, data1):
self.left1 = None
self.right1 = None
self.data1 = data1

def put(self, data1):
if data1 < self.data1:
if self.left1 is None:
self.left1 = BintreeEN(data1)
else:
self.left1.put(data1)
else:
if self.right1 is None:
self.right1 = BintreeEN(data1)
else:
self.right1.put(data1)

def write(self):
if self.left1:
self.left1.write()
print(self.data1)
if self.right1:
self.right1.write()

def exists(self, data1):
if data1 < self.data1:
if self.left1 is None:
return None, None
return self.left1.exists(data1)
elif data1 > self.data1:
if self.right1 is None:
return None, None
return self.right1.exists(data1)
else:
return self.data1

程序文件

#first tree
root = Bintree("root")
with open("word3.txt", "r", encoding = "utf-8") as file:
for row in file:
word = row.strip()
checklist = root.exists(word)
if checklist == word:
pass
else:
root.put(word)
#second tree
root1 = BintreeEN("root1")
with open('engelska.txt','r', encoding = "utf-8") as f:
for row in f:
onerow = row.split()
for rowz in onerow:
word1 = rowz.strip()
#HERE IT something thats wrong...
if root1.exists(word1):
pass
else:
root1.put(word1)
if root.exists(word1): #Check if value is in the first tree
print(word1, end = " ")

最佳答案

您的 exists() 方法始终返回 True 值。您的 .put() 永远不会被调用,因为第一个 if 始终为 true:

if root1.exists(word1):
pass

如果树中不存在该值,并且非空元组为,您的.exists()方法将返回(None, None)总是正确:

>>> if (None, None):
... print 'A tuple is considered True if not empty'
...
A tuple is considered True if not empty

简单地返回只是None,而不是元组:

def exists(self, data1):
if data1 < self.data1:
if self.left1 is None:
return None
return self.left1.exists(data1)
elif data1 > self.data1:
if self.right1 is None:
return None
return self.right1.exists(data1)
else:
return self.data1

或者,通过使用 and 的短路性质以及 return 立即退出函数:

def exists(self, data1):
if data1 < self.data1:
return self.left1 and self.left1.exists(data1)
if data1 > self.data1:
return self.right1 and self.right1.exists(data1)
return self.data1

通过此更改,您的二叉树可以正常工作:

>>> tree = BintreeEN('foo')
>>> tree.exists('foo')
'foo'
>>> tree.exists('bar')
>>> tree.put('bar')
>>> tree.exists('bar')
'bar'

关于python 根据二叉树检查值,空输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18947259/

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