TOPIC

Wrong answer (5%) - Fiz todos os testes e calculou

Luciano R asked 2 months ago

Não entendo quais são os critérios para o acerto do código aqui no URI.

salario = float(input(''))

if salario <= 400:
    porcentagem = 15
    diferenca_reais = (salario * porcentagem) / 100
    reajuste = salario + (salario * porcentagem) / 100

elif salario <= 800:
    porcentagem = 12
    diferenca_reais = (salario * porcentagem) / 100
    reajuste = salario + (salario * porcentagem) / 100

elif salario <= 1200:
    porcentagem = 10
    diferenca_reais = (salario * porcentagem) / 100
    reajuste = salario + (salario * porcentagem) / 100

elif salario <= 2000:
    porcentagem = 7
    diferenca_reais = (salario * porcentagem) / 100
    reajuste = salario + (salario * porcentagem) / 100

elif salario > 2000:
    porcentagem = 4
    diferenca_reais = (salario * porcentagem) / 100
    reajuste = salario + (salario * porcentagem)

print('Novo salario: {:.2f}'.format(reajuste))
print('Reajuste ganho: {:.2f}'.format(diferenca_reais))
print('Em percentual: {} %'.format(porcentagem))

Observação: Eu não utilizei:

if salario >=400.01 and salario <= 800 

porque penso que, se no primeiro if eu determinei <=400 vai receber alíquota de 15%, qualquer valor acima de 400 vai entrar no outro if e assim eu fiz com os demais. Não sei onde estou errando.

Remember not post solutions. Your post may be reviewed by our moderators.

  • Rafael Vieira replied 4 weeks ago

    Olá Luciano na linha 26 você esqueceu de dividir por 100

        reajuste = salario + (salario * porcentagem) / 100

    fora isso não vejo nenhum problema no código.

  • Tarcísio Mazur Junior replied 2 months ago

    Fiquei com a pulga atrás da orelha, pois uma linguagem deve executar estritamente o que está escrito não se importando se o que o que está sendo processado é eficiente ou correto à alto nível.

    Submeti seu código corrigido e removi o "elif salario > 2000:" por "else:" e o código recebeu accepted.

    Creio que você tenha apenas trocado o elif e deixado "else salario > 2000:" pois este erro apesar que apresente erro de compilação em outras linguagens, em python gera erro em execução.

    Disponha! :D

  • Luciano R replied 2 months ago

    Tarcísio, a sua dica referente ao elif -> else ajudou a mudar o código do erro para Runtime error. Consegui resolver o problema refatorando dentro dos ifs.

    Todas essas linhas se repetiam nos ifs:

        diferenca_reais = (salario * porcentagem) / 100
        reajuste = salario + (salario * porcentagem)

    logo, eu deixei elas no final e eliminei as repetidas. Então, erro do tipo rumtimer está relaconado a códigos repetidos

    Obrigado pela ajuda.

  • Tarcísio Mazur Junior replied 2 months ago

    Sua lógica está completamente certa, é a mais eficiente, memso que o último elif seja redundante, e é nele que o erro acontece. Reajuste não está sendo dividido por 100. Você pode também calcular o reajuste como sendo:

    reajuste=salario-diferenca_reais