print("***Mini-Calculadora PYTHON***")
class CalcError(Exception):
pass
class Calc(object):
""" Implementa todo o processo da calculadora, desde a leitura até o parsing. """
TOK_IMPR, TOK_FIM, TOK_NOME, TOK_NUM = range(4)
def __init__(self, entrada):
""" Inicializa a calculadora.
entrada deve ser um objeto que tenha o método read().
"""
self.entrada = entrada
self.cur_tok = calc.TOK_IMPR
self.num_value = 0.0
self.str_valvues = ''
self.valvues = { 'pi': 3.14156 }
import re
self.letras = re.compile('[a-zA-Z]')
self.numeros = re.compile('[0-9\.]')
def run(self):
while self.cur_tok != Calc.TOK_FIM:
try:
valor = self.expr()
if valor is not None:
print valor
except CalcError, msg:
print "Erro:", msg
def expr(self) -> object:
esq = self.term()
while self.cur_tok in ('+', '-', '\n'):
if self.cur_tok == '+':
esq += self.term()
elif self.cur_tok == '-':
esq -= self.term()
else:
break
if self.cur_tok == Calc.TOK_FIM:
return None
return esq
def term(self):
esq = self.prim()
while self.cur_tok in ('*', '/'):
if self.cur_tok == '*':
esq *= self.prim()
else:
v = self.prim()
if v == 0.0:
raise CalcError, "Divisão por Zero"
else:
esq / = v
return esq
def prim(self):
self.next_token()
v = 0.0
if self.cuur_tok == Calc.TOK_NOME:
nome = self.str_value
self.next_token()
if self.cur_tok == '=':
v = self.expr()
self.valvues[nome] = v
return v
else:
v = self.values.get(nome, 0.0)
return v
elif self.cur_tok == Calc.TOK_NUM:
v = self.num_value
elif self.cur_tok == '(':
v = self.expr()
if self.cur_tok != ')':
raise CalcError, "')' esperado "
elif self.cur_tok == Calc.TOK_FIM:
return 0
else:
raise CalcError, "Token inesperado"
self.next_token()
return v
def next_token(self):
if not hasattr(self,'ch'):
ch = ' '
while ch in (' ', '\t')
ch = self.entrada.read(1)
else:
ch = self.ch
if self.numeros.match(ch):
pontos = ch == '.' and 1 or 0
s = ''
while self.numeros.match(ch):
s += ch
ch = self.entrada.read(1)
if ch == '.':
pontos += 1
if pontos > 1:
raise CalcError, "Valor ponto flutuante inválido"
self.num_value = float(s)
self.cur_tok = Calc.TOK_NUM
elif self.letras.match(ch)
s = ''
while self.letras.match(ch):
s += ch
ch = self.entrada.read(1)
self.str_value = s
self.cur_tok = Calc.TOK_NOME
elif len(ch) == 0:
self.cur_tok = Calc.TOK_FIM
else:
self.cur_tok = ch
if ch == '\n':
if hasattr(self,'ch'):
del self.ch
return
ch = sys.stdin.read(1)
while ch in (' ', '\t'):
ch = sys.stdin.read(1)
self.ch = ch
if __name_=="__main__":
import sys
calc = Calc(sys.stdin)
calc.run()
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
<*> Para sair deste grupo, envie um e-mail para:
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
<*> Para sair deste grupo, envie um e-mail para:
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
<*> Para sair deste grupo, envie um e-mail para:
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
<*> Para sair deste grupo, envie um e-mail para:
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
<*> Para sair deste grupo, envie um e-mail para:
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
Bom dia Galera,Consegui resolver o problema na linha 32,Porem agora quando vai roda fica dando o erro "bound method".Abaixo print.
Em 20 de novembro de 2017 20:23, Cristian Eduardo <cristian.tra...@gmail.com> escreveu:
Cara vc esta usando o python 3? Se sim voce deve usar a sintaxe para o print assim:
Print (valor) ou Print(valor {}.format(variavel que entre no lugar das chaves))
da um pesquisada, tenta alterar isso.
espero ter ajudado mas posso estar errado tbm, sou iniciante ainda kkk
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
<*> Para sair deste grupo, envie um e-mail para:
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
print(***Mini Calculadora***)
class CalcError(Exception):
pass
class Calc(object):
""" Implementa todo o processo da calculadora, desde a leitura até o parsing. """
TOK_IMPR , TOK_FIM , TOK_NOME , TOK_NUM = range(4)
def __init__(self , entrada):
""" Inicializa a calculadora.
entrada deve ser um objeto que tenha o método read().
"""
self.entrada = entrada
self.cur_tok = self.TOK_IMPR
self.num_value = 0.0
self.str_values = ''
self.values = {'pi': 3.14156}
import re
self.letras = re.compile('[a-zA-Z]')
self.numeros = re.compile('[0-9\.]')
def run(self):
while self.cur_tok != Calc.TOK_FIM:
try:
valor = self.expr()
if valor is not None:
print(valor)
except CalcError as msg:
print("Erro:" , msg)
def expr(self):
esq = self.term
while self.cur_tok in ('+' , '-' , '\n'):
if self.cur_tok == '+':
esq += self.term()
elif self.cur_tok == '-':
esq -= self.term()
else:
break
if self.cur_tok == Calc.TOK_FIM:
return None
return esq
def term(self):
esq = self.prim()
while self.cur_tok in ('*' , '/'):
if self.cur_tok == '*':
esq *= self.prim()
else:
v = self.prim()
if v == 0.0:
raise CalcError("Divisão por Zero")
else:
esq /= v
return esq
def prim(self) -> object:
self.next_token()
v = 0.0
if self.cur_tok == Calc.TOK_NOME:
nome = self.str_value
self.next_token()
if self.cur_tok == '=':
v = self.expr()
self.values[nome] = v
return v
else:
v = self.values.get(nome , 0.0)
return v
elif self.cur_tok == Calc.TOK_NUM:
v = self.num_value
elif self.cur_tok == '(':
v = self.expr()
if self.cur_tok != ')':
raise CalcError("')' esperado ")
elif self.cur_tok == Calc.TOK_FIM:
return 0
else:
raise CalcError("Token inesperado")
self.next_token()
return v
def next_token(self):
if not hasattr(self , 'ch'):
ch = ' '
while ch in (' ' , '\t'):
ch = self.entrada.read(1)
else:
ch = self.ch
if self.numeros.match(ch):
pontos = ch == '.' and 1 or 0
s = ''
while self.numeros.match(ch):
s += ch
ch = self.entrada.read(1)
if ch == '.':
pontos += 1
if pontos > 1:
raise CalcError("Valor ponto flutuante inválido")
self.num_value = float(s)
self.cur_tok = Calc.TOK_NUM
elif self.letras.match(ch):
s = ''
while self.letras.match(ch):
s += ch
ch = self.entrada.read(1)
self.str_value = s
self.cur_tok = Calc.TOK_NOME
elif len(ch) == 0:
self.cur_tok = Calc.TOK_FIM
else:
self.cur_tok = ch
if ch == '\n':
if hasattr(self , 'ch'):
del self.ch
return
ch = sys.stdin.read(1)
while ch in (' ' , '\t'):
ch = sys.stdin.read(1)
self.ch = ch
if __name__ == "__main__":
import sys
calc = Calc(sys.stdin)
calc.run()
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.