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

Calculadora Simples com função

Então pessoal, Boa madrugada a todos! Ainda estou estudando a pacas tentando entender sobre função que ainda está embolando minha cabeça.

Resolvi construir uma calculadora baseada na didáticas de vocês, mas ainda não está claro a estrutura.

Construí o código abaixo mas ainda dar erro. Peço a colaboração de alguém que possa ajudar!

Obrigado!!! :)

# -*- coding: UTF-8 -*-

def soma(adicao):
    adicao = a + b

def subtracao(diminuir):
    diminuir = a - b

def multiplicacao(multi):
    multi = a * b

def divisao(dividir):
    dividir = a / b

def entrada_valores():
    print 'Digite o valor de A'
    x = raw_input()
    a = float(x)
    print 'Digite o valor de B'
    y = raw_input()
    b = float(y)

def menu():
    escolha = ''
    while(escolha != '0'):
        print '[1] para soma'
        print '[2] para subtração'
        print '[3] para multiplicação'
        print '[4] para divisão'
        print '[0] FINALIZAR PROGRAMA'

        escolha = raw_input()
        if(escolha == '1'):
            entrada_valores()
            soma(adicao, a, b)
            print soma(adicao, a, b)

        if(escolha == '2'):
            entrada_valores(a,b)
            subtracao(diminuir)
            print subtracao(diminuir)

        if(escolha == '3'):
            entrada_valores(a,b)
            multiplicacao(multi)
            print multiplicacao(multi)

        if(escolha == '4'):
            entrada_valores(a,b)
            divisao(dividir)
            print divisao(dividir)

menu()
10 respostas

Suas funções de operações matemáticas não retornam valor algum. Cadê o return?

Você fez o treinamento de lógica de programação? Esse entendimento da necessidade de return e seu uso faz parte da lógica de programação.

Se não fez, para você ficar ainda melhor, seria interessante fazer.

Mas vc está de parabéns por tentar resolver o problema da calculadora.

Ok! Vou seguir o seu conselho e vou assistir... Obrigado Flávio!

Beleza, mas tenta resolver o problema da calculadora. Eu estou aqui esperando seu feedback. Se não conseguir, pode abrir o coração, que eu te ajudo aqui :)

Vi que você marcou minha solução. Quando consertar seu código, cole ele aqui para que possamos dar uma olhada, ou você quer que eu já cole a solução? Fica melhor para você?

Esse código é mais um trabalho meu de curiosidade da ferramenta. A aula do Python está maravilhosa. Mas ainda é muito diferente do que ensina na faculdade.

Aqui é muito mais prático, com exemplo do dia-a-dia. Na faculdade é mais lógica. Essa quarta, vou ter prova de Python, e queria esta fera pra ela. Vou assistir as aulas e tentar compreender até lá. Se eu sentir dificuldade, não exitarei em expressar minhas dúvidas. Obrigado Flávio!!!

Opa, nesse caso, segue um gabarito que vou comentar? Uma solução possível é:

# -*- coding: UTF-8 -*-

def soma(numero1, numero2):
    resultado = numero1 + numero2
    return resultado

def subtracao(numero1, numero2):
    resultado = numero1 - numero2
    return resultado

def multiplicacao(multiplicador, numero):
    resultado = multiplicador * numero
    return resultado

def divisao(divisor, numero):
    resultado = numero / divisor
    return resultado

def menu():
    escolha = ''
    while(escolha != '0'):
        print '[1] para soma'
        print '[2] para subtração'
        print '[3] para multiplicação'
        print '[4] para divisão'
        print '[0] FINALIZAR PROGRAMA'

        escolha = raw_input()
        if(escolha == '1'):
            print 'Digite o primeiro número para soma'
            numero1 = raw_input()
            numero1 = float(numero1)
            print 'Digite o segundo número para soma'
            numero2 = raw_input()
            numero2 = float(numero2)            
            resultado = soma(numero1, numero2)
            print 'O resultado da soma é %s ' % (resultado)

        if(escolha == '2'):
            print 'Digite o primeiro número para substração'
            numero1 = raw_input()
            numero1 = float(numero1)
            print 'Digite o segundo número para substração'
            numero2 = raw_input()
            numero2 = float(numero2)            
            resultado = subtracao(numero1, numero2)
            print 'O resultado da subtração é %s ' % (resultado)

        if(escolha == '3'):
            print 'Digite o multiplicador'
            multiplicador = raw_input()
            multiplicador = float(multiplicador)
            print 'Digite o número que será multiplicado'
            numero = raw_input()
            numero = float(numero)            
            resultado = multiplicacao(multiplicador, numero)
            print 'O resultado da multiplicação é %s ' % (resultado)

        if(escolha == '4'):
            print 'Digite o divisor'
            divisor = raw_input()
            divisor = float(divisor)
            print 'Digite o número que será dividido'
            numero = raw_input()
            numero = float(numero)            
            resultado = divisao(divisor, numero)
            print 'O resultado da divisão é %s ' % (resultado)

menu()

Primeiro, veja que cada operação foi materializada através de uma função como soma, subtracao, etc.

Para eu somar eu preciso de dois números, certo? A mesma coisa para subtrair. É por isso que as duas funções recebem dois parâmetros. Eu chamei de numero1 e numero2, mas poderiam ser qualquer outro nome, mas o que deve ficar claro é que a função soma e subtração precisam de dois parâmetro e é assim que indicamos quantos parâmetros a função precisa.

Então, se você fosse a função soma e eu te pedisse para realizar a soma? Eu precisaria te chamar e ainda passar os dois número de que você precisa para que você consiga realizar a operação. Certo? No final, depois de você pensar com os dois números que dei, o que você vai me retornar, isto é, qual será sua resposta? Se eu te passei 10 e 20 e é uma soma, você vai me retornar 30!

É por isso que dentro da sua função, você pode ter quantas variáveis quiser, mas você precisa indicar através da instrução return qual variável será devolvida pela função. Uma função pode devolver um valor, mas se tivermos várias variáveis declaradas dentro da função, como ele vai saber qual devolver? Por que tem que devolver? Porque variáveis declaradas dentro de uma função, só existem dentro dela, é o que chamamos de escopo da função. POr exemplo, dentro da função soma, eu criei uma variável chamada resultado que guarda a soma dos dois números passados como parâmetro. E veja que é ela que deu return.

E dai? Agora quem chamar a função pode fazer assim:

# exemplo, não está no código acima
resultado_da_soma = soma(10,30)
print resultado_da_soma # imprime 40

No exemplo acima, chamei a função soma passando 10 e 30 e ele me devolveu (você sempre pega o return criando uma variável à esquerda da chamada da função) 40 e guardei na variável resultado_da_soma, que aliás poderia ser qualquer nome.

No código que dei como exemplo, eu usei dentro de soma a variável resultado e também na hora que chamo a soma com os dados que você entrou também usei a variável resultado. Apesar de serem variáveis de nomes iguais, a primeiro só existe dentro da função e não é enxergada fora dela. Foi através do return que a outra variável retorno guardou o valor da variável retornada pela função.

Essas questões a gente vê no curso de lógica. Espero ter ajudado um pouco mais com esse curso relâmpago de lógica de programação.

Abraço bom estudo e boa prova!

E para completar, eu poderia simplificar o código. Dentro das funções soma, subtração, etc., no lugar deu guardar o resultado numa variável, eu posso fazer isso:

def soma(numero1, numero2):
    return numero1 + numero2


def subtracao(numero1, numero2):
    return numero1 - numero2

def multiplicacao(multiplicador, numero):
    return multiplicador * numero

def divisao(divisor, numero):
    return numero / divisor

Dá o mesmo resultado. A diferença é que a instrução return, quando encontra uma operação, ela espera a operação se resolvida primeiro e no final retorna o resultado.

Outra coisa que pode melhorar, é que toda hora eu leio do teclado e converto usando a função float. Que tal criar uma função chamada ler_como_float que já me retornar o valor como float? Assim, o código final ficaria assim:

# -*- coding: UTF-8 -*-

def soma(numero1, numero2):
    return numero1 + numero2

def subtracao(numero1, numero2):
    return numero1 - numero2

def multiplicacao(multiplicador, numero):
    return multiplicador * numero

def divisao(divisor, numero):
    return numero / divisor

def ler_como_float():
    numero = raw_input()
    return float(numero)

def menu():
    escolha = ''
    while(escolha != '0'):
        print '[1] para soma'
        print '[2] para subtração'
        print '[3] para multiplicação'
        print '[4] para divisão'
        print '[0] FINALIZAR PROGRAMA'

        escolha = raw_input()
        if(escolha == '1'):
            print 'Digite o primeiro número para soma'
            numero1 = ler_como_float()
            print 'Digite o segundo número para soma'
            numero2 = ler_como_float()    
            resultado = soma(numero1, numero2)
            print 'O resultado da soma é %s ' % (resultado)

        if(escolha == '2'):
            print 'Digite o primeiro número para substração'
            numero1 = ler_como_float()
            print 'Digite o segundo número para substração'
            numero2 = ler_como_float()  
            resultado = subtracao(numero1, numero2)
            print 'O resultado da subtração é %s ' % (resultado)

        if(escolha == '3'):
            print 'Digite o multiplicador'
            multiplicador = ler_como_float()  
            print 'Digite o número que será multiplicado'
            numero = ler_como_float()
            resultado = multiplicacao(multiplicador, numero)
            print 'O resultado da multiplicação é %s ' % (resultado)

        if(escolha == '4'):
            print 'Digite o divisor'
            divisor = ler_como_float()
            print 'Digite o número que será dividido'
            numero = ler_como_float()
            resultado = divisao(divisor, numero)
            print 'O resultado da divisão é %s ' % (resultado)

menu()

Veja que a função ler_com_float não recebe parâmetro, ela apenas retorna. Ela retorna o que você já digitou convertido para float.

É isso. Bom estudo!

Vlw cara! Obrigado, está ajudando bastante!

Vou tentar pegar lógica até o fim do dia aqui no trabalho. Acho que dar tranquilo!

É difícil um designer migrar para programação...Mas vou conseguir!!! Um grande abraço!

solução!

Boa! Mas um detalhe: o curso de lógica não dá para terminar em um dia, nem em três. Veja com carinho isso.

Abraço