편집 기록

편집 기록
  • 프로필 알 수 없는 사용자님의 편집
    날짜2020.04.03

    파이썬 스택 질문!


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

    지금 문제가 정수만을 입력하면 문자열로 리스트에 잘 저장이 됩니다. 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)
    
  • 프로필 편집요청빌런님의 편집
    날짜2020.04.03

    파이썬 스택 질문!


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

    지금 문제가 정수만을 입력하면 문자열로 리스트에 잘 저장이 됩니다. 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)
    
  • 프로필 알 수 없는 사용자님의 편집
    날짜2020.04.03

    파이썬 스택 질문!


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

    지금 문제가 정수만을 입력하면 문자열로 리스트에 잘 저장이 됩니다. 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)