TypeError

TypeError

by Viktor Chust Bugno Pires de Almeida -
Number of replies: 3

Ao executar o método eval da minha classe calculadora,  o Python Shell mostra erro ao desempilhar um token da pilha de execução:

>>>hp.eval ('1 1 +')

Traceback (...) :

File "<pyshell#5">, line 1 in module

       hp.eval('1 1 +')

File "(...)\calculadora.py", line 171, in eval

       n2 = self.pilha_exe.desempilha(token)

TypeError: desempilha() takes 1 positional argument but 2 were given

Aqui, no caso, pilha_exe é o nome do atributo da pilha de execução da calculadora. O que significa esse erro indicado na última linha?

In reply to Viktor Chust Bugno Pires de Almeida

Re: TypeError

by José Coelho de Pina -
Python 3.4.3 (default, Mar 26 2015, 22:07:01) 
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pilha import Pilha
>>> p = Pilha() # cria uma pilha
>>> p.empilha(11) 
>>> print(p)
[11]
>>> p.empilha(22) 
>>> print(p)
[11, 22]
>>> p.empilha(-1)
>>> print(p)
[11, 22, -1]
>>> topo = p.desempilha(2) # p deve ser o único argumento 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: desempilha() takes 1 positional argument but 2 were given
>>> topo = p.desempilha() # sim, p é um argumento colocado antes... self receberá seu valor
>>> topo
-1
>>> print(p)
[11, 22]
>>> 
In reply to José Coelho de Pina

Re: TypeError

by Viktor Chust Bugno Pires de Almeida -

Acho que entendi, coloquei mais argumentos do que o necessário na chamada da função...

De qualquer forma, tenho outra dúvida com relação à pilha de execução: depois que o método eval foi chamado e todo executado, a pilha de execução da calculadora não deve conter nenhum token? Ou precisamos limpar a pilha de execução somente quando o método eval for executado novamente?

In reply to Viktor Chust Bugno Pires de Almeida

Re: TypeError

by José Coelho de Pina -

... a pilha de execução da calculadora não deve conter nenhum token?  a pilha de execução somente quando o método eval for executado novamente?

Python 3.4.3 (default, Mar 26 2015, 22:03:40) 
[GCC 4.9.2] on linux
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 

==================================================
     C A L C U L A D O R A    P O L O N E S A     
==================================================

Digite: 
  - uma expressão em notação polonesa como "soma 2 3 + ="; ou
  - "ver" para ligar/desligar o modo verboso; ou
  - "dic" para exibir o dicionário de variáveis; ou
  - "fim" para terminar.

Operadores possíveis:
   + - * / % :cinco operações aritméticas básicas
   ^ : exponeciação
   ! : menos unário
   = : atribuição

calc >>> ver
AVISO: modo verboso ativado.
calc >>> 1 2 3
lista de tokens: [N(1), N(2), N(3)]
pilha de execução: []
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: [N(2), N(3)]
pilha de execução: [N(1)]
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: [N(3)]
pilha de execução: [N(1), N(2)]
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: []
pilha de execução: [N(1), N(2), N(3)]
dicionário de variáveis: {}
modo verboso: ativado

ERRO: falta(m) operador(es) nessa expressão
calc >>> 3 4 5 + -
lista de tokens: [N(3), N(4), N(5), O('+'), O('-')]
pilha de execução: []
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: [N(4), N(5), O('+'), O('-')]
pilha de execução: [N(3)]
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: [N(5), O('+'), O('-')]
pilha de execução: [N(3), N(4)]
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: [O('+'), O('-')]
pilha de execução: [N(3), N(4), N(5)]
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: [O('-')]
pilha de execução: [N(3), N(9)]
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: []
pilha de execução: [N(-6)]
dicionário de variáveis: {}
modo verboso: ativado

-6
calc >>> 6 7 8 *
lista de tokens: [N(6), N(7), N(8), O('*')]
pilha de execução: []
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: [N(7), N(8), O('*')]
pilha de execução: [N(6)]
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: [N(8), O('*')]
pilha de execução: [N(6), N(7)]
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: [O('*')]
pilha de execução: [N(6), N(7), N(8)]
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: []
pilha de execução: [N(6), N(56)]
dicionário de variáveis: {}
modo verboso: ativado

ERRO: falta(m) operador(es) nessa expressão
calc >>> 9 10 11 + - 
lista de tokens: [N(9), N(10), N(11), O('+'), O('-')]
pilha de execução: []
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: [N(10), N(11), O('+'), O('-')]
pilha de execução: [N(9)]
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: [N(11), O('+'), O('-')]
pilha de execução: [N(9), N(10)]
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: [O('+'), O('-')]
pilha de execução: [N(9), N(10), N(11)]
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: [O('-')]
pilha de execução: [N(9), N(21)]
dicionário de variáveis: {}
modo verboso: ativado

lista de tokens: []
pilha de execução: [N(-12)]
dicionário de variáveis: {}
modo verboso: ativado

-12
calc >>> fim
Curta a nossa página no feiçebuqui.

>>>