我制作了一个返回字符串的类,该字符串可以追加或删除输入值。
如果堆栈类为空,我必须通过以下断言来通过测试:
assert print(Stack()) == ''
我尝试使用 str 和 repr ,但没有成功。
我的班级定义如下:
class Stack:
def __init__(self):
self.data = ''
self.final_value = ''
def __repr__(self):
for i in range(self.size()):
if i == 0:
self.final_value += str(self.data[i])
else:
self.final_value += ' -> ' + str(self.data[i])
return str(self.final_value)
def __len__(self):
return len(self.data)
def is_empty(self):
if len(self.data) == 0:
return True
else:
return False
def push(self, value_to_add):
if type(value_to_add) is int or type(value_to_add) is str:
self.data = str(value_to_add) + self.data
elif callable(value_to_add):
self.data = 'F' + self.data
elif type(value_to_add) is dict:
self.data = 'D' + self.data
elif type(value_to_add) is list:
self.data = 'L' + self.data
elif value_to_add is None:
self.data = 'N' + self.data
return self.data
def add(self, value_to_add):
if type(value_to_add) is int or type(value_to_add) is str:
self.data = str(value_to_add) + self.data
elif callable(value_to_add):
self.data = 'F' + self.data
elif type(value_to_add) is dict:
self.data = 'D' + self.data
elif type(value_to_add) is list:
self.data = 'L' + self.data
elif value_to_add is None:
self.data = 'N' + self.data
return self.data
def pop(self):
if self.is_empty():
raise StackPopException
else:
value_to_pop = self.data[0]
self.data = self.data[1:]
return int(value_to_pop)
def size(self):
return len(self.data)
StackPopException = ValueError
运行以下测试时,由于返回值的类型,我的代码失败:
stack = Stack()
stack.push(3)
stack.push(1)
stack.push(2)
assert print(stack) == '2 -> 1 -> 3'
编辑
如何在不更改测试线的情况下使它正常工作?
答案 0 :(得分:1)
执行assert str(stack) == '2 -> 1 -> 3'
强制类返回其自身的字符串表示形式。
问题后编辑:
打印功能返回None
,因此返回值不能用于测试。
答案 1 :(得分:0)
尝试assert repr(stack) == "'2 -> 1 -> 3'"
(注意引号的确切用法)。