2015-01-23 2 views
-3

Задача состоит в том, чтобы написать функцию, которая создает стек, толкает буквы в заданной строке параметра в стек и выталкивает их, как показано в строке параметров '*'. Буква в выражении указывает на нажатие на стек, а звездочка указывает на операцию pop. Эта функция называется modify_stack, которая принимает единственную строку в качестве параметра и возвращает последовательность значений, возвращаемых поп-операциями. Вызов функции с использованием print(modify_stack('EAS*Y*QUE***ST***IO*N***'))stack, push и pop in python

Мой код:

def modify_stack(symbolString): 
    stack=Stack() 
    i=0 
    for i in symbolString: 
     if i != '*': 
      stack.push(i) 
     else: 
      print(stack.pop()) 

Правильный ответ 'SYEUQTSAONIE', но я получил что-то другое. Пожалуйста, укажите, где я ошибся.

+0

использовать отладчик и шаг за шагом через код построчно. В какой-то момент он будет делать что-то другое, что вы ожидаете от него. Это проблема. –

+1

вам нужно организовать свой вопрос и рассказать нам, что вы получили, вместо того, чтобы «у меня что-то другое». – oyss

+0

Предполагая, что ваш 'Stack' правильный, ваша функция будет« печатать »правильные символы, а затем неявно« возвращать None ». Просьба уточнить вывод, который вы получаете. – jonrsharpe

ответ

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