2015-01-23 3 views
-3

질문은 스택을 만드는 함수를 작성하고, 주어진 매개 변수 문자열의 문자를 스택에 넣고 매개 변수 문자열에 '*'으로 표시된대로 끕니다. 표현식에있는 문자는 스택에 밀어 넣기를 나타내고 별표는 팝 작업을 나타냅니다. 이 함수는 modify_stack이라고하며 단일 문자열을 매개 변수로 사용하고 팝 작업에서 반환 된 값의 시퀀스를 반환합니다. 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

질문을 구성하고 "다른 것을 얻었습니다"대신에 얻은 것을 알려주십시오. – oyss

+0

'Stack'이 맞다고 가정하면 함수는 올바른 문자를'print'하고 암시 적으로'return 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 
관련 문제