Boa tarde! O meu código não está dando certo até copiei o do professor mas mesmo assim não deu certo ele não está imprimindo os valores da variável imposto_calculado. Alguém pode me ajudar!
Boa tarde! O meu código não está dando certo até copiei o do professor mas mesmo assim não deu certo ele não está imprimindo os valores da variável imposto_calculado. Alguém pode me ajudar!
Oi Deivid, como você está?
Mostra algum erro? Se sim, qual?
Compartilhe seu código conosco por favor.
Fico no aguardo para poder te ajudar.
-*- coding: UTF-8 -*-
from impostos import ISS, ICMS, ICPP, IKCV
class Calculador_de_impostos(object):
def realiza_calculo(self, orcamento, imposto):
imposto_calculado = imposto.calcula(orcamento)
print('imposto_calculado')
if __name__ == '__main__':
from orcamento import Orcamento, Item
calculador = Calculador_de_impostos()
orcamento = Orcamento()
orcamento.adiciona_item(Item('ITEM 1', 50))
orcamento.adiciona_item(Item('ITEM 2', 200))
orcamento.adiciona_item(Item('ITEM 3', 250))
print('ISS e ICMS')
calculador.realiza_calculo(orcamento, ISS())
calculador.realiza_calculo(orcamento, ICMS())
print('ISS com ICMS')
calculador.realiza_calculo(orcamento, ISS(ICMS()))
print('ICPP e IKCV')
calculador.realiza_calculo(orcamento, ICPP())
calculador.realiza_calculo(orcamento, IKCV())
print('ICPP com IKCV')
print(calculador.realiza_calculo(orcamento, ICPP(IKCV())))
print('imposto_calculado')
codigo 2
# -*- coding: UTF-8 -*-
from abc import ABCMeta, abstractmethod
class Imposto(object):
def __init__(self, outro_imposto = None):
self.__outro_imposto = outro_imposto
def calculo_do_outro_imposto(self, orcamento):
if self.__outro_imposto is None:
return 0
else:
return self.__outro_imposto.calcula(orcamento)
@abstractmethod
def calcula(self, orcamento):
pass
class Template_de_imposto_condicional(Imposto):
__metaclass__ = ABCMeta
def calcula(self, orcamento):
if self.deve_usar_maxima_taxacao(orcamento):
return self.maxima_taxacao(orcamento) + self.calculo_do_outro_imposto(orcamento)
else:
return self.minima_taxacao(orcamento) + self.calculo_do_outro_imposto(orcamento)
@abstractmethod
def deve_usar_maxima_taxacao(self, orcamento):
pass
@abstractmethod
def maxima_taxacao(self, orcamento):
pass
@abstractmethod
def minima_taxacao(self, orcamento):
pass
def IPVX(metodo_ou_funcao):
def wrapper(self, orcamento):
return metodo_ou_funcao(self, orcamento) + 50.0
return wrapper
class ISS(Imposto):
def calcula(self, orcamento):
return orcamento.valor * 0.1 + self.calculo_do_outro_imposto(orcamento)
class ICMS(Imposto):
def calcula(self, orcamento):
return orcamento.valor * 0.06 + self.calculo_do_outro_imposto(orcamento)
class ICPP(Template_de_imposto_condicional):
def deve_usar_maxima_taxacao(self, orcamento):
return orcamento.valor > 500
def maxima_taxacao(self, orcamento):
return orcamento.valor * 0.07
def minima_taxacao(self, orcamento):
return orcamento.valor * 0.05
class IKCV(Template_de_imposto_condicional):
def deve_usar_maxima_taxacao(self, orcamento):
return orcamento.valor > 500 and self.__tem_item_maior_que_100_reais(orcamento)
def maxima_taxacao(self, orcamento):
return orcamento.valor * 0.1
def minima_taxacao(self, orcamento):
return orcamento.valor * 0.06
def __tem_item_maior_que_100_reais(self, orcamento):
for item in orcamento.obter_itens():
if item.valor > 100:
return True
return False
Deivid, isso está ocorrendo porque você está imprindo uma string, para imprimir o valor do imposto é necessário colocar apenas a variável imposto_calculado
sem as apas.
Modifique de:
class Calculador_de_impostos(object):
def realiza_calculo(self, orcamento, imposto):
imposto_calculado = imposto.calcula(orcamento)
print('imposto_calculado')
Para:
class Calculador_de_impostos(object):
def realiza_calculo(self, orcamento, imposto):
imposto_calculado = imposto.calcula(orcamento)
print(imposto_calculado)
A alteração foi no comando print, pois, anteriormente o que estava sendo impresso era uma string e não o conteúdo da variável.
Após essa alteração verifique se irá obter o resultado esperado. Qualquer coisa estou por aqui.
Abraços!
Olá ocorreu este problema ao executar: Traceback (most recent call last): File "calculador_de_impostos.py", line 40, in print(imposto_calculado) NameError: name 'imposto_calculado' is not defined
Deivid, a alteração é apenas na classe Calculador_de_impostos
, na função realiza_calculo
.
Quanto a esse trecho:
print('ICPP e IKCV')
calculador.realiza_calculo(orcamento, ICPP())
calculador.realiza_calculo(orcamento, IKCV())
print('ICPP com IKCV')
print(calculador.realiza_calculo(orcamento, ICPP(IKCV())))
print('imposto_calculado')
Realmente dará erro se você retirar as aspas, pois não há a variável imposto_calculado
nesse escopo. A variável imposto_calculado
está dentro da função realiza_calculo
e será visível apenas dentro dela.
Então esse print do trecho mostrado acima pode ser deletado.
Qualquer coisa estou por aqui.