• Revisão

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.

Algumas funções oferecidas pelo pacote math do Python.

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

Qual é o comando necessário para utilizar um pacote do Python.

Answer

Para utilizamos um pacote, usamos o comando import seguido do nome do pacote.

Exercise 2

Vamos usar o exercício "Iniciando em Funções" nos próximos passos. Abra ele no VScode e volte para este handout.

Acessar exercício

Exercise 3

Para iniciar nossa sequência de exercícios, digite o código abaixo no arquivo de exercício que você abriu no VSCode e execute.

import math

resultado = math.cos(0)

print(resultado)

O que foi impresso no terminal?

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

Modifique o programa para imprimir o valor de cosseno para o ângulo 180° usando o seguinte trecho de código math.cos(180). Você deve ter percebido que o valor esperado foi diferente de -1.

Consultando a documentação da função math.cos, o que está faltando neste código para conseguirmos calcular o valor correto do cosseno?

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.

Documentação da função math.cos.

Dessa forma, devemos passar os valores em radianos.

Valores dos ângulos em radianos.

Exercise 5

Vamos agora progredir e começar a passar alguns testes no nosso exercício. Adapte o código de exemplo para mostrar o cosseno de 30° e 120°, um em cada linha. Lembre-se que, para converter um ângulo A para radianos devemos aplicar a seguinte fórmula

\[ A \times \frac{\pi}{180} \]

Rode os testes depois de fazer essa adaptação. Agora seu código deve passar no teste Mostrou cosseno de 30 e 120. Você pode usar pi=3.14.

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:

  1. se precisarmos mudar esse código temos agora um monte de lugares para mudar!
  2. é 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

Implemente uma função chamada graus_para_radianos que recebe um ângulo em graus e retorna esse valor em radianos. Depois rode seu programa. Ele deverá executar sem erros. A saída do programa mudou?

Você deverá estar vendo código parecido com o abaixo. Alguns pontos de atenção:

  1. 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 quando graus_para_radianos for chamada
  2. a definição da função (linhas 3-5) deve estar antes das linhas de print
1
2
3
4
5
6
7
8
9
import math

def graus_para_radianos(graus):
    resultado = graus * 3.14 / 180
    return resultado

# Os print abaixo estão comentados, então por enquanto eles não irão executar
# print(math.cos(30 * 3.14 / 180))
# print(math.cos(120 * 3.14 / 180))

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

A partir da linha 6 já temos graus_para_radianos disponível para usar no nosso programa. A partir da linha 6 já temos graus_para_radianos disponível para usar no nosso programa. Vamos agora voltar a mostrar os números na saída, mas dessa vez chamando nossa função ao invés de fazer as contas explicitamente a cada print.

Levando em conta as informações acima, como você mudaria as linhas 8 e 9 para usar a sua função ao invés de escrever a expressão de conversão para radianos duas vezes?

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:

  1. primeiro computamos o resultado de graus_para_radianos(30)
  2. esse valor é passado para math.cos
  3. 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.