我从节点返回值时遇到了一些问题,我做过:
class Node():
def __init__(self, item, next = None):
self.item = item
self.next = next
class upp2():
def __init__(self):
self.top=None
mening=input('Write a meaning: ')
for ordet in mening.split():
self.put(ordet)
def put(self, newdata):
node= Node(newdata, self.top)
self.top=node
def pop(self):
while self.top.item != None:
theitem = self.top.item
self.top = self.top.next
return theitem
upp=upp2()
print(upp.pop())
代码的工作原理如下:你写了一个含义,意思被分成单独的单词并存储在节点中。节点部分可以工作,但是我在返回所有单词时遇到了问题。 pop()只返回最后一个单词,其余单词不变。我的意思是:
如果我写了一个意思:"我的名字是Ben"我希望它回归:
'Ben
is
name
My'
但我只得到本。提前感谢
答案 0 :(得分:0)
你的逻辑是正确的。但是那里的return
会打破for
循环,导致只返回1个值。
因此,如果您的目标是打印字词,则可以将其替换为print(theitem)
,或者如果您想在其他地方使用此字段,请使用yield(theitem)
。
答案 1 :(得分:0)
您的代码中有2个问题。
首先如hyades所述,返回离开你的循环,你应该用yield
构建一个生成器
接下来,结束循环的测试是错误的。它应该是while self.top != None:
upp2.pop
应该成为:
def pop(self):
while self.top != None:
theitem = self.top.item
self.top = self.top.next
yield theitem
你可以这样使用它:
for x in upp.pop():
print(x)
答案 2 :(得分:0)
这是我的解决方案,尽可能地遵循您的代码:
class Node():
def __init__(self, item, n = None):
self.item = item
self.n = n
class upp2():
def __init__(self):
self.top=None
mening=input('Write a meaning: ')
for ordet in mening.split():
self.put(ordet)
def put(self, newdata):
node = Node(newdata, self.top)
self.top=node
def pop(self):
while self.top != None:
theitem = self.top.item
self.top = self.top.n
if(theitem):
print(theitem, end=' ') #for python 3.x
#print theitem, #for python 2.x
upp=upp2()
upp.pop()
#input: my name is user2149616
#output:user2149616 is name my
首先,我会避免使用next,因为它是一个python关键字(进入Node类定义)。其次你的主要错误是内部的回归。它会停止功能,因此它只会打印第一个节点的内容。 我希望这可以有所帮助。 此致