如何在class中创建一个空列表,是否需要使用__init__函数是这个问题?
How to create an empty list in a class, do I need to use the __init__ function is this problem?
我对我的代码有疑问,我需要在这个问题中使用'init'函数吗?我试过用,但不知道哪里出错了。
这是比利时根特大学的作业
“可以使用一种受 Patience 纸牌游戏启发的技术按递增顺序对一系列项目进行排序。排序分两个阶段完成。首先,将项目一个接一个地放置在一系列堆栈中遵守这些规则:
最初没有堆栈
第一个项目形成一个新的堆栈,只包含该项目
每个后续项目都放在最左边的堆栈上,其顶部项目大于或等于 item ;如果所有顶部项目都小于 item ,则该项目在所有现有堆栈的右侧形成一个新堆栈
当没有更多的项目要放置时,通过反复挑选最小的可见项目来恢复排序序列。可见项目是堆栈顶部的项目。
例如,考虑使用 Patience 排序技术对整数序列 (4 3 9 1 5 2 7 8 6) 进行排序。第一堆得到 4 和 3。由于 9 大于 3,它开始第二堆,1 进入第一堆,然后 5 和 2 进入第二堆。此时,第一个堆栈(从上到下)由 (1 3 4) 组成,第二个堆栈由 (2 5 9) 组成,其余序列由整数 (7 8 6) 组成。现在 7 进入第三层,8 进入第四层,6 进入第三层 7 的顶部。放置所有物品后,从第一堆收集 1 个,从第二堆收集 2 个,从第一堆收集 3 和 4 个,从第二堆收集 5 个,从第三堆收集 6 和 7 个,从第四堆收集 8 个,从第四堆收集 9 个第二个堆栈。
作业
项目表示为整数 (int)。项目堆栈表示为列表(列表),其中第一个元素是堆栈顶部的项目,最后一个元素是堆栈底部的项目。一系列相邻的栈表示为一个列表(list),其中第一个元素是最左边的栈,最后一个元素是最右边的栈。
定义一个 class PatienceSorter,它可用于使用 Patience 排序技术按升序对一系列项目进行排序。 class 必须至少支持以下方法:
一种方法堆栈return当前堆栈系列(列表)。
一种方法stack_count return 是当前堆栈数 (int)。
一种方法item_count return所有堆栈中项目的当前数量(整数)。
一种获取项目的方法add_item。根据 Patience 排序技术的规则,给定的项目必须放在现有或新堆栈的顶部。该方法必须 return 对调用该方法的对象的引用。
一种方法add_items,它接受项目的序列(列表(list)或元组(tuple))。根据 Patience 排序技术的规则,给定的项目必须一个接一个地放置在现有或新堆栈的顶部。该方法必须 return 对调用该方法的对象的引用。
我尝试使用 init 函数,但出现问题
如果我 运行 我得到的程序:
AttributeError: 'NoneType' 对象没有属性 'stacks'
class PatienceSorter:
def __init__(self):
self.stapel = []
def stacks(self):
return self.stapel
def stack_count(self):
return len(self.stacks())
def item_count(self):
aantal = 0
for item in self.stacks():
aantal += len(item)
return aantal
def add_item(self, item):
if self.stack_count() == 0:
self.stacks().append(item)
else:
toegevoegd = False
for object in self.stacks():
toegevoegd = False
laatste = object[len(object) - 1]
if laatste > item:
object.append(item)
toegevoegd = True
if not toegevoegd:
self.stacks().append(item)
return self.stacks()
This is what I get when I run the program
一个问题是 add_item 方法在 self.stack_count() != 0
时仅 returns。如果 self.stack_count() == 0
,该方法将项目附加到 self.stacks()
,然后是 returns None。因此,您最终调用 None.stacks()
,导致错误。
另外,你说"The method must return a reference to the object on which the method was called."这种情况下,对象是self
,所以你应该returnself
,而不是self.stacks()
。
将您的 return 语句更改为 self
并修复缩进,以便无论 self.stack_count()
都被调用应该可以防止错误。但是,我无法确定算法的准确性,因为我没有查看它。
def add_item(self, item):
if self.stack_count() == 0:
self.stacks().append(item)
else:
toegevoegd = False
for object in self.stacks():
toegevoegd = False
laatste = object[len(object) - 1]
if laatste > item:
object.append(item)
toegevoegd = True
if not toegevoegd:
self.stacks().append(item)
return self
我认为 stack overflow 有禁止添加代码截图的政策,所以下次一定要包含文本格式的截图。
代码还是有错误:
self.stacks().append(item)
此行将项目附加到堆栈列表中。当它实际上应该附加一个包含该项目的新列表时。那就是代码应该是:
self.stacks().append([item])
函数应该是:
def add_item(self, item):
if self.stack_count() == 0:
self.stacks().append([item])
else:
toegevoegd = False
for stack in self.stacks():
toegevoegd = False
laatste = stack[-1]
if laatste > item:
stack.append(item)
toegevoegd = True
if not toegevoegd:
self.stacks().append([item])
return self
布尔变量如果允许早点可以去掉return:
def add_item(self, item):
if self.stack_count() == 0:
self.stacks().append([item])
else:
for stack in self.stacks():
laatste = stack[-1]
if laatste > item:
stack.append(item)
return self
self.stacks().append([item])
return self
我对我的代码有疑问,我需要在这个问题中使用'init'函数吗?我试过用,但不知道哪里出错了。
这是比利时根特大学的作业
“可以使用一种受 Patience 纸牌游戏启发的技术按递增顺序对一系列项目进行排序。排序分两个阶段完成。首先,将项目一个接一个地放置在一系列堆栈中遵守这些规则:
最初没有堆栈
第一个项目形成一个新的堆栈,只包含该项目
每个后续项目都放在最左边的堆栈上,其顶部项目大于或等于 item ;如果所有顶部项目都小于 item ,则该项目在所有现有堆栈的右侧形成一个新堆栈
当没有更多的项目要放置时,通过反复挑选最小的可见项目来恢复排序序列。可见项目是堆栈顶部的项目。
例如,考虑使用 Patience 排序技术对整数序列 (4 3 9 1 5 2 7 8 6) 进行排序。第一堆得到 4 和 3。由于 9 大于 3,它开始第二堆,1 进入第一堆,然后 5 和 2 进入第二堆。此时,第一个堆栈(从上到下)由 (1 3 4) 组成,第二个堆栈由 (2 5 9) 组成,其余序列由整数 (7 8 6) 组成。现在 7 进入第三层,8 进入第四层,6 进入第三层 7 的顶部。放置所有物品后,从第一堆收集 1 个,从第二堆收集 2 个,从第一堆收集 3 和 4 个,从第二堆收集 5 个,从第三堆收集 6 和 7 个,从第四堆收集 8 个,从第四堆收集 9 个第二个堆栈。
作业
项目表示为整数 (int)。项目堆栈表示为列表(列表),其中第一个元素是堆栈顶部的项目,最后一个元素是堆栈底部的项目。一系列相邻的栈表示为一个列表(list),其中第一个元素是最左边的栈,最后一个元素是最右边的栈。
定义一个 class PatienceSorter,它可用于使用 Patience 排序技术按升序对一系列项目进行排序。 class 必须至少支持以下方法:
一种方法堆栈return当前堆栈系列(列表)。
一种方法stack_count return 是当前堆栈数 (int)。
一种方法item_count return所有堆栈中项目的当前数量(整数)。
一种获取项目的方法add_item。根据 Patience 排序技术的规则,给定的项目必须放在现有或新堆栈的顶部。该方法必须 return 对调用该方法的对象的引用。
一种方法add_items,它接受项目的序列(列表(list)或元组(tuple))。根据 Patience 排序技术的规则,给定的项目必须一个接一个地放置在现有或新堆栈的顶部。该方法必须 return 对调用该方法的对象的引用。
我尝试使用 init 函数,但出现问题 如果我 运行 我得到的程序: AttributeError: 'NoneType' 对象没有属性 'stacks'
class PatienceSorter:
def __init__(self):
self.stapel = []
def stacks(self):
return self.stapel
def stack_count(self):
return len(self.stacks())
def item_count(self):
aantal = 0
for item in self.stacks():
aantal += len(item)
return aantal
def add_item(self, item):
if self.stack_count() == 0:
self.stacks().append(item)
else:
toegevoegd = False
for object in self.stacks():
toegevoegd = False
laatste = object[len(object) - 1]
if laatste > item:
object.append(item)
toegevoegd = True
if not toegevoegd:
self.stacks().append(item)
return self.stacks()
This is what I get when I run the program
一个问题是 add_item 方法在 self.stack_count() != 0
时仅 returns。如果 self.stack_count() == 0
,该方法将项目附加到 self.stacks()
,然后是 returns None。因此,您最终调用 None.stacks()
,导致错误。
另外,你说"The method must return a reference to the object on which the method was called."这种情况下,对象是self
,所以你应该returnself
,而不是self.stacks()
。
将您的 return 语句更改为 self
并修复缩进,以便无论 self.stack_count()
都被调用应该可以防止错误。但是,我无法确定算法的准确性,因为我没有查看它。
def add_item(self, item):
if self.stack_count() == 0:
self.stacks().append(item)
else:
toegevoegd = False
for object in self.stacks():
toegevoegd = False
laatste = object[len(object) - 1]
if laatste > item:
object.append(item)
toegevoegd = True
if not toegevoegd:
self.stacks().append(item)
return self
我认为 stack overflow 有禁止添加代码截图的政策,所以下次一定要包含文本格式的截图。
代码还是有错误:
self.stacks().append(item)
此行将项目附加到堆栈列表中。当它实际上应该附加一个包含该项目的新列表时。那就是代码应该是:
self.stacks().append([item])
函数应该是:
def add_item(self, item):
if self.stack_count() == 0:
self.stacks().append([item])
else:
toegevoegd = False
for stack in self.stacks():
toegevoegd = False
laatste = stack[-1]
if laatste > item:
stack.append(item)
toegevoegd = True
if not toegevoegd:
self.stacks().append([item])
return self
布尔变量如果允许早点可以去掉return:
def add_item(self, item):
if self.stack_count() == 0:
self.stacks().append([item])
else:
for stack in self.stacks():
laatste = stack[-1]
if laatste > item:
stack.append(item)
return self
self.stacks().append([item])
return self