파이썬 스택 질문!

조회수 882회

안녕하세요. 지금 스택을 이용해서 계산기를 구현하고 있습니다.

지금 문제가 정수만을 입력하면 문자열로 리스트에 잘 저장이 됩니다. ex) 1+2/3 [1,+,2,/,3]
그런데 실수를 저장하려고 하는데 도저히 모르겠어서 질문드립니다.
ex)1.2+3/4 내가 원하는 값[1.2,+,3,/,4]
구글링을 해도 잘 안나옵니다.. 도와주시면 감사하겠습니다.
지금 제가 코딩 하고 있는 부분은 elif token in '.': 이 부분 입니다.
저는 .이라는 문자열이 들어오면 문자열을 기준으로 앞 과 뒤를 추가하려고 했습니다. 그런데 그게 아닌거 같아서 질문드립니다.

class Stack:
    def __init__(self):
        self.items = []

    def push(self, val):
        self.items.append(val)

    def pop(self):
        try:
            return self.items.pop()
        except IndexError:
            print("Stack is empty")
    def top(self):
        try:
            return self.items[-1]
        except IndexError:
            print("Stack is empty")

    def __len__(self):
        return len(self.items)

    def isEmpty(self):
        return self.__len__() == 0  

def get_token_list(expr):
    opstack = Stack()
    outstack = []
    token_list = expr

    for token in token_list:
        print(token)
        if token == '(':
            opstack.push(token)
        elif token == ')':
            opstack.push(token)
        elif token in '+-/*^': #opstack에 자기 자신보다 우선순위 높은 연산자 pop하기
            #while (not opstack.isEmpty()) and \
            #(prec[opstack.top()] >= prec[token]):
            #outstack.append(opstack.pop())
                #print(outstack)
                # print(opstack)
            opstack.push(token)
        elif token in '.':
            outstack.append(opstack.top()+token)
            opstack.push(token)
        elif opstack.pop() == '.':  # . 일때
            outstack.append(opstack.pop()+opstack.top()+token)
        opstack.push(token)

        #outstack.append(opstack.top())
        #if outstack in '.':
        #    outstack.append(str(opstack.pop()+'.'+opstack.pop()))
    outstack.append(opstack.pop())
    return print(outstack)

expr = input()
value = get_token_list(expr)
#value = compute_postfix(infix_to_postfix(get_token_list(expr)))
#print(value)
  • 그냥 '1.2'을 문자열로 넣으면 안되나요? float('1.2') 하면 숫자로 바뀔텐데요... 김호원 2020.4.3 22:03
  • 콤마를 굳이 연산자 토큰으로 분류 해서 숫자 처리를 이 레벨까지 끌고와야할 이유가 있나요? 토큰화 단계에서 이미 처리되어야할 것 같은데요. 알 수 없는 사용자 2020.4.3 22:46
  • 감사합니다 제가 너무 어렵게 생각했습니다. 말씀대로 풀었습니다~! 알 수 없는 사용자 2020.4.4 00:35

1 답변

  • 혹시 어떻게 해서 풀으셨는지 알수있을까요?? 코딩한것좀 보고싶네요 ㅠㅠ

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)