Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Erro no código com uso de ifs

Programei um novo imposto, que só é cobrado em valores acima de 50 reais. Apliquei esse código:

# arquivo impostos.py

class IMP(object):
    def calcula(self, orcamento):
        if orcamento < 50:
            return orcamento.valor
        else:
            return orcamento.valor * 0.25

Ao importar para a calculadora, apresentou esse erro:

Traceback (most recent call last):
  File "C:/Users/João/Desktop/Alura/Design Patterns/calculador_de_impostos.py", line 28, in <module>
    calculador.realiza_calculo(orcamento, IMP())
  File "C:/Users/João/Desktop/Alura/Design Patterns/calculador_de_impostos.py", line 8, in realiza_calculo
    imposto_calculado = imposto.calcula(orcamento)
  File "C:\Users\João\Desktop\AluraDesign Patterns\impostos.py", line 16, in calcula
    if orcamento < "50":
TypeError: unorderable types: Orcamento() < int()

Agora não sei como resolver. Poderiam me ajudar?

4 respostas

Olá João, tudo bem?

Coloque seu código completo aqui para darmos uma olhada.

Tudo bem. São 3 arquivos:

#arquivo orcamento.py

class Orcamento(object):

    def __init__(self):
        self.__itens = []

    @property
    def valor(self):
        total = 0.0
        for item in self.__itens:
            total+= item.valor
        return total

    def obter_itens(self):

        return tuple(self.__itens)
    @property
    def total_itens(self):
        return len(self.__itens)

    def adiciona_item(self, item):
        self.__itens.append(item)

class Item(object):

    def __init__(self, nome, valor):
        self.__nome = nome
        self.__valor = valor

    @property
    def valor(self):
        return self.__valor

    @property
    def nome(self):
        return self.__nome

#arquivo calculador_de_impostos.py

from impostos import ISS, ICMS, IMP

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('MOUSE', 50))
    orcamento.adiciona_item(Item('MEM RAM', 200))
    orcamento.adiciona_item(Item('PROCESSADOR', 250))
    orcamento.adiciona_item(Item('TECLADO', 100))

    calculador.realiza_calculo(orcamento, ISS())
    calculador.realiza_calculo(orcamento, ICMS())
    calculador.realiza_calculo(orcamento, IMP())

#arquivo impostos.py

class ISS(object):

    def calcula(self, orcamento):

        return orcamento.valor * 0.1

class ICMS(object):

    def calcula(self, orcamento):

        return orcamento.valor * 0.06

class IMP(object):
    def calcula(self, orcamento):
        if orcamento < "50":
            return orcamento.valor
        else:
            return orcamento.valor * 0.25
solução!

Olá João,

Na classe IMP você precisa fazer a comparação entre dois inteiros. Então, no if o correto é orcamento.valor e não apenas orcamento:

class IMP(object):
    def calcula(self, orcamento):
        if orcamento.valor < 50:
            return orcamento.valor
        else:
            return orcamento.valor * 0.25

Funcionou direitinho, muito obrigado!!!