1
resposta

[Projeto] calculadora usando lambda

def calcular(valor1, valor2):
    chance = 5
    while True:
        if chance == 0:
            print("Estude mais sobre operações matemáticas e retorne o quanto antes!")
            return None
            
        operacao = input("Escolha a operação: +, -, * ou /: ")
        
        if operacao == '/' and valor2 == 0:
            print("Não se pode dividir por 0!");
            break
        operacoes = {
            '+': lambda x, y: x + y,
            '-': lambda x, y: x - y,
            '*': lambda x, y: x * y,
            '/': lambda x, y: dividir(x, y)
        }
        
        if operacao in operacoes:
            return operacoes[operacao](valor1, valor2)
        
        print("Operação matemática inválida!")
        chance -= 1
        
valor1 = float(input("Digite o primeiro número: "))
valor2 = float(input("Digite o segundo número: "))

resultado = calcular(valor1, valor2)

if resultado is not None:
    print(f"O resultado é: {resultado}")
    
1 resposta

Oii Paulo Anderson, tudo bem?

Que implementação interessante! Você foi além do básico e adicionou controle de tentativas e validação de divisão por zero. Isso mostra bastante cuidado com a experiência de quem usa o programa.

Tenho só um ponto para você avaliar: a função dividir referenciada no dicionário de operações não está definida em nenhum lugar do código. Se o usuário escolher /, vai acontecer um NameError em tempo de execução.

Você já trata a divisão por zero antes do dicionário ser montado, então uma forma de resolver seria substituir a chamada à dividir por uma lambda diretamente, assim como as outras operações:

'/': lambda x, y: x / y,

A proteção contra valor2 == 0 já está no bloco if anterior, então a lambda pode confiar que y não será zero quando for chamada.

Uma outra coisa que vale refletir: quando valor2 é zero e o usuário escolhe /, você usa break para sair do while. O que acontece com o resultado nesse caso? Vai chegar como None na linha de fora da função? Pensa se esse comportamento é o que você quer.

Qualquer dúvida é só trazer aqui!

Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.

Bons estudos!

Sucesso

Imagem da comunidade