Dúvida em Python

| Blasted |

Portugal@Home Member
Bem, aproveito a thread para colocar aqui uma dúvida. Continuei a leitura do livro que andava a ler, para me inteirar melhor sobre os ciclos e isso, e cheguei a uma parte onde se fala do return.
O problema é que esta parte (ao contrário das outras, que estão bem explicaditas até) não está lá muito bem explicada.
A questão é:

Código:
def valor_absoluto(x):
    if x < 0:
        return -x
    if x > 0:
        return x
    print x
    
valor_absoluto(-43)
Este programa não era suposto devolver 43?
Como funciona exactamente isto do return?

P.S: Provavelmente esta não é a thread indicada para isto, visto que se foca mais nos exercicios, mas como é uma duvida pequenina, resolvi pôr aqui.
 
eu não estou familiarizado com a sintaxe dessa linguagem por isso posso estar enganado, mas tu tens um print depois do return da função.
ao fazer return a função acaba nesse mesmo ponto, e não executa mais nada do que está nessa função, por isso essa função faz return (e sim, é suposto retornar 43) mas não chega a fazer o print. será esta a tua dúvida? se for, então o que tens que fazer é tirar esse print e fazer algo como

Código:
print( valor_absoluto(-43) )
como o valor_absoluto retorna 43, isto é o mesmo que fazer

Código:
print( 43 )
em vez de fazer logo print também podias atribuir a uma variavel ;)
 
Vê o return como um "a função acaba aqui, leva este valor" (e não "escreve este valor").
Tal como o MPalhas escreveu:
Código:
print valor_absoluto(-43)
é que te vai escrever (e não devolver) 43.

Na tua função tens um print no fim que apenas vai funcionar num caso especial, dependente de duas condições (consequência de teres dois if antes):
- Quando o valor não for menor que zero: Pois se for menor que zero entra no primeiro if, e como está lá um return, a função acaba ali;
- Quando o valor não for maior que zero: Pois se for maior que zero entra no segundo if, e estando lá um return, a função acaba naquele ponto.
Ora, se não é maior nem menor que zero, é zero. E aí vai fazer print (mas não devolve nada, ou mais correctamente, devolve None).
Qualquer outro número vai ser devolvido.

Resumindo e baralhando:
O return devolve o valor para onde foi chamada a função, fazendo com que esta termine nesse ponto.
O print é uma instrução que apenas vai mandar escrever o valor (e "não termina" a função).

Se a função estiver definida:
Código:
def valor_absoluto(x):
    if x < 0:
        return -x
    return x

e se, tal como foi escrito, fizer:
Código:
print valor_absoluto(-43)

O que vai acontecer é que a função valor_absoluto vai ser chamada primeiro, e devolve um valor (neste caso entra no primeiro if e devolve –(–43), ou seja, 43), que é mandado para o print, que por sua vez vai escrever 43.

Uma nota final sobre o código que escrevi para a função valor_absoluto(x): Sendo o objectivo ter um valor absoluto, apenas temos que inverter o sinal caso este seja negativo, logo não é preciso tratar o caso em que o sinal é positivo, pois este já está pronto a ser devolvido, daí apenas ter uma estrutura if.

Espero ter ajudado :)
 
Última edição:
Back
Topo