问题是编写一个创建堆栈的函数,将给定参数字符串中的字母推送到堆栈并按参数字符串中的'*'
指示弹出它们。表达式中的字母表示推入堆栈,星号表示弹出操作。该函数名为modify_stack
,它接受单个字符串作为参数,并返回pop操作返回的值序列。使用print(modify_stack('EAS*Y*QUE***ST***IO*N***'))
我的代码:
def modify_stack(symbolString):
stack=Stack()
i=0
for i in symbolString:
if i != '*':
stack.push(i)
else:
print(stack.pop())
正确的答案是'SYEUQTSAONIE'
,但我得到了一些不同的东西。请指出我哪里出错了。
答案 0 :(得分:1)
您的代码可以正常实现Stack
,并打印出预期的字符序列。
我认为您的问题只是结果打印在modify_stack()
而不是返回作为函数返回值。这是通过调用函数的方式建议的 - print(modify_stack('EAS*Y*QUE***ST***IO*N***'))
。显然,modify_stack()
的返回值是预期的。
只需更改您的函数以累积生成的字母序列列表,然后将该序列作为字符串返回......如下所示:
class Stack(list):
push = list.append
def modify_stack(symbolString):
stack=Stack()
result = []
for character in symbolString:
if character != '*':
stack.push(character)
else:
result.append(stack.pop())
return ''.join(result)
现在每当看到result
时,每个弹出的字符都会添加到*
列表的末尾。最后,使用result
将join()
中的字符转换为字符串,并从函数
>>> print(modify_stack('EAS*Y*QUE***ST***IO*N***'))
SYEUQTSAONIE