Revisão#
Neste handout vamos fazer uma revisão dos conceitos básicos de funções. Quando começamos a aprender funções, no começo do semestre, utilizamos o exemplo das funções matemáticas. Após aprendermos os operadores matemáticos básicos (adição, subtração, divisão, multiplicação e potenciação) vimos que o Python também disponibiliza o pacote matemático math
, que estende a linguagem com funções como seno, cosseno, logaritmo, etc.
Matemática em Ciência da Computação. Nesse início do curso nós utilizamos exemplos matemáticos por serem mais diretos: uma expressão matemática diz exatamente o que deve ser feito e em qual ordem. A rigor não é necessário ser um gênio da matemática para aprender a programar, porém ela é importante em muitas áreas da computação que são o foco do nosso curso, como IA e Machine Learning.
Voltando ao pacote matemático, precisamos primeiro importar o pacote para poder utilizar suas funções. Por exemplo:
import math
resultado = math.cos(0)
print(resultado)
Exercise 1
Answer
Para utilizamos um pacote, usamos o comando import
seguido do nome do pacote.
Exercise 2
Exercise 3
Answer
Foi impresso 1.0 que representa o cosseno de 0.
Antes de prosseguir, recomendamos que você sempre teste os códigos apresentados no seu próprio computador. Para isso, procure sempre digitar o código ao invés de copiar e colar.
Exercise 4
Answer
Provavelmente, ao utilizar a função math.cos, você passou como argumento da função um ângulo em graus. Por exemplo, math.cos(90).
Mas ao consultar a documentação da função math.cos, podemos verificar que a função espera receber um ângulo em radianos.
Dessa forma, devemos passar os valores em radianos.
Exercise 5
Você deve ter notado que, para usar math.cos
duas vezes, precisamos repetir o código de converter para radianos. Ficar repetindo código assim traz dois problemas:
- se precisarmos mudar esse código temos agora um monte de lugares para mudar!
- é muito fácil esquecer de adaptar uma parte desse código copiado e introduzir erros.
Para isso Python nos permite criar funções. Você pode pensar na função como uma parte reaproveitável de um programa. Como assim? Considere math.cos
que acabamos de testar. Nós pedimos para o Python executar essa função passando um ângulo. Não sabemos (e nem precisamos saber, por enquanto) como ela faz isso, mas ela calcula o cosseno desse ângulo e devolve o resultado. Pensando no nosso programa, o que aconteceu foi que plugamos uma caixa preta na qual entram números representando ângulos e saem números representando o seu cosseno e é isso o que precisamos saber. Inclusive, chamamos math.cos duas vezes com ângulos diferentes.
Vamos agora definir nossa própria função? Nosso primeiro passo será definir a nossa função usando o modelo abaixo. É uma boa prática colocar as nossas funções no início do arquivo logo após as linhas contendo import
.
Exercise 6
Você deverá estar vendo código parecido com o abaixo. Alguns pontos de atenção:
- as linhas 4 e 5, que estão logo abaixo do
def
devem iniciar com 4 espaços. Todo código iniciando com 4 espaços está "dentro" da função e será executado quandograus_para_radianos
for chamada - a definição da função (linhas 3-5) deve estar antes das linhas de
print
Se você executar o código acima não vai acontecer nada. Nesse código nós estamos apenas definindo a função graus_para_radianos
(por isso a palavra def). Podemos entender a linha 1 como: "Python, quando eu pedir para você executar a função graus_para_radianos
, passando um valor para graus
, o que você deve fazer é: multiplicar o valor armazenado na variável graus
por 3.14/180
e guardar o resultado na variável resultado
e depois devolver o valor armazenado na variável resultado
como o resultado". Em outras palavras, é como se estivéssemos criando um novo comando do Python (assim como já temos o print
ou o math.cos
, por exemplo).
Vamos refletir brevemente sobre a função que acabamos de criar. Qual é o valor esperado para o resultado da chamada da função python graus_para_radianos(graus)? A resposta é: depende! Depende do valor de graus
. A função graus_para_radianos só pode devolver um valor se definirmos um valor para graus.
Essa ideia é a mesma que apresentamos sobre a função print
, ou seja, precisamos de uma informação adicional. Uma vez que definimos uma função é como se ela se tornasse parte da linguagem Python. Assim, para esse contexto introdutório, não existe nenhuma diferença entre a função print
e a função converte_milhas_para_km(graus)
em termos de importância. Ambas são comandos disponíveis no Python para o programador utilizar em seu código.
Exercise 7
Answer
Sabendo que usamos nossa função igual ao print
, podemos usar graus_para_radianos(30)
para fazer a primeira conversão. Com isso podemos substituir a expressão 30 * 3.14 / 180
pela chamada da função graus_para_radianos(30)
.
Para indicar que queremos chamar uma função usamos ()
. Se ela recebe argumentos, os colocamos dentro dos parênteses.
Aqui já começamos a combinar funções:
- primeiro computamos o resultado de
graus_para_radianos(30)
- esse valor é passado para
math.cos
- cujo resultado é passado para
print
para mostrar na tela.
Quanto mais complexos os programas que criarmos mais funções estaremos combinando, sejam elas criadas por nós mesmos como graus_para_radianos
como funções já existentes como math.cos
.
Em resumo, funções são muito importantes para resolver problemas que aparecem frequentemente. Ao invés de repetirmos código, criamos um novo comando do Python e usamos este comando em vários lugares.