5
respostas

O código não funciona

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!

5 respostas

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.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software