堆栈,推送和弹出python

时间:2015-01-23 09:49:10

标签: python string

问题是编写一个创建堆栈的函数,将给定参数字符串中的字母推送到堆栈并按参数字符串中的'*'指示弹出它们。表达式中的字母表示推入堆栈,星号表示弹出操作。该函数名为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',但我得到了一些不同的东西。请指出我哪里出错了。

1 个答案:

答案 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时,每个弹出的字符都会添加到*列表的末尾。最后,使用resultjoin()中的字符转换为字符串,并从函数

返回
>>> print(modify_stack('EAS*Y*QUE***ST***IO*N***'))
SYEUQTSAONIE