- Função para calcular o imposto de renda retido:
- Esta função deve receber a base de cálculo como parâmetro.
- Ela deve retornar o valor do imposto de renda retido de acordo com a tabela progressiva do IRPF.
Protótipo da função:
def calcular_imposto(base_calculo: float):
# Implemente aqui
def calcular_imposto(base_calculo: float):
# Implemente aqui
Passo 1
O que o enunciado pede:
- Implementar a função
def calcular_imposto(base_calculo: float):que recebe a base de cálculo e retorna o valor do imposto de renda retido na fonte segundo a tabela progressiva do IRPF.
Informações relevantes (não havia tabela explícita no enunciado, portanto vou usar a tabela progressiva mensal frequentemente usada em exercícios e exemplos práticos):
- faixa isenta: até
- faixa 1: de
até — alíquota , parcela a deduzir - faixa 2: de
até — alíquota , parcela a deduzir - faixa 3: de
até — alíquota , parcela a deduzir - faixa 4: acima de
— alíquota , parcela a deduzir
Observação importante: como o enunciado não especificou o ano/tabela, escolhi essa tabela clássica usada em muitos exercícios. Se a sua prova usa outra tabela, troca-se apenas os números.
Passo 2
Entendendo a regra de cálculo (a ideia por trás da fórmula que vamos implementar).
- Há duas formas equivalentes de ver o imposto progressivo:
- Somar imposto por faixa marginal (calcular quanto incide em cada pedaço da base que ultrapassa cada limite).
- Usar, para cada faixa, uma fórmula direta do tipo
. Essa segunda forma é a prática adotada na retenção na fonte no Brasil: a parcela a deduzir é um ajuste que transforma o somatório marginal em uma expressão linear simples para cada faixa.
- Vamos usar a forma direta porque é simples, compacta e adequada para implementação em prova/algoritmo.
Definição das variáveis (explicando a fórmula):
-
é a entrada da função, ou seja, parâmetro . -
é a taxa percentual da faixa, por exemplo para . -
é um valor fixo associado àquela faixa. - Fórmula aplicada em cada faixa:
Se o resultado for negativo (pode ocorrer por arredondamento), devolvemos
.
Passo 3
Algoritmo passo a passo que a função seguirá (explicado como se fosse para a prova):
- Recebo
(parâmetro ). Se , devolvo . - Verifico em qual faixa a
está, usando os limites da tabela: - Se
: isento imposto . - Se
: use e . - Se
: use e . - Se
: use e . - Se
: use e .
- Se
- Calculo
. - Garanto que não devolvo valor negativo:
. - Opcional (prático para a prova / para folha de pagamento): arredondo para 2 casas decimais e retorno o valor (por exemplo, usando arredondamento bancário simples com
round(..., 2)).
Passo 4
Implementação em Python (o código que corresponde ao algoritmo acima). Aqui mostro o código comentado e didático para você entender cada linha antes de ver a resposta final:
- Primeiro tratamos entradas inválidas (base menor ou igual a zero).
- Em seguida usamos testes encadeados para identificar a faixa correta.
- Aplicamos a fórmula direta e arredondamos.
(Explicação da escolha do teste: usar condições do tipo
<= limite evita ambiguidades nas fronteiras, porque as faixas da tabela são definidas com limites fechados / abertos conforme apresentado.)Passo 5
Exemplo numérico passo a passo (para consolidar a ideia):
- Suponha
. - Pela tabela,
, então estamos na faixa com e . - Aplicando a fórmula:
- Resultado: imposto retido =
.
Resposta
def calcular_imposto(base_calculo: float):
“”"
Calcula o imposto de renda retido na fonte segundo a tabela progressiva (exemplo clássico).
Retorna o valor do imposto (float), arredondado para 2 casas decimais.
Tabela usada (valores em R$):
- até 1.903,98: isento
- 1.903,99 a 2.826,65: 7,5% -> parcela a deduzir 142,80
- 2.826,66 a 3.751,05: 15% -> parcela a deduzir 354,80
- 3.751,06 a 4.664,68: 22,5% -> parcela a deduzir 636,13
- acima de 4.664,68: 27,5% -> parcela a deduzir 869,36
“”"
# entrada inválida ou isenção
if base_calculo is None or base_calculo <= 0:
return 0.0
“”"
Calcula o imposto de renda retido na fonte segundo a tabela progressiva (exemplo clássico).
Retorna o valor do imposto (float), arredondado para 2 casas decimais.
Tabela usada (valores em R$):
- até 1.903,98: isento
- 1.903,99 a 2.826,65: 7,5% -> parcela a deduzir 142,80
- 2.826,66 a 3.751,05: 15% -> parcela a deduzir 354,80
- 3.751,06 a 4.664,68: 22,5% -> parcela a deduzir 636,13
- acima de 4.664,68: 27,5% -> parcela a deduzir 869,36
“”"
# entrada inválida ou isenção
if base_calculo is None or base_calculo <= 0:
return 0.0
if base_calculo <= 1903.98:
return 0.0
elif base_calculo <= 2826.65:
aliquota = 0.075
parcela = 142.80
elif base_calculo <= 3751.05:
aliquota = 0.15
parcela = 354.80
elif base_calculo <= 4664.68:
aliquota = 0.225
parcela = 636.13
else:
aliquota = 0.275
parcela = 869.36
imposto = base_calculo * aliquota - parcela
imposto = max(imposto, 0.0)
return round(imposto, 2)