S01 - Atividade de Aprendizagem (2 de 2): Chamando Funções
Como a maioria dos programas de computador úteis é muito grande, os programadores costumam dividi-los em partes. Isso facilita a escrita, a correção de erros e a compreensão do código. Em Python, é possível dividir um programa em módulos, classes e funções. Nesta aula, você vai aprender a chamar funções já existentes; na próxima, aprenderá a criar suas próprias funções.
Conceitos
Estes são os conceitos e tópicos de programação em Python que você deve aprender durante esta aula.
O que é uma Função?
Uma função é um grupo de instruções (comandos de computador) que juntas executam uma tarefa. Em termos gerais, existem quatro tipos de funções em Python:
-
Funções embutidas
-
Funções da biblioteca padrão
-
Funções de terceiros
-
Funções definidas pelo usuário
Um programador (você) pode economizar muito tempo usando funções existentes. Nesta aula, você aprenderá como usar ou chamar os dois primeiros tipos de funções. Na semana 3, você aprenderá como instalar módulos de terceiros e chamar funções de terceiros. Na próxima aula, você aprenderá a escrever e chamar funções definidas pelo usuário.
Funções embutidas
Python inclui muitas funções embutidas, como: input, int,
float, str, len, range, abs, round,
list, dict, open e print. Elas são chamadas de funções
embutidas porque você não precisa importar nenhum módulo para usá-las. São simplesmente uma parte embutida da
linguagem Python. Você pode ler sobre as funções embutidas na seção Funções Embutidas da referência online
oficial do Python.
Como Chamar uma Função
Programadores usam uma função ao chamá-la (também conhecido como "invocar"). Chamar uma função
significa instruir o computador a executar as instruções contidas nela. Independentemente do tipo de função
(embutida, padrão, de terceiros ou definida pelo usuário), uma função é chamada escrevendo seu nome seguido por um
conjunto de parênteses ( ). Durante o CSE 110 e 111, você frequentemente escreveu código que
chamava as funções embutidas input e print, como neste exemplo:
nome = input("Por favor, digite seu nome: ")
print(f"Olá, {nome}")
> python exemplo_1.py
Por favor, digite seu nome: Milena
Olá, Milena
Observe no exemplo de código anterior que, para chamar a função input, o programador escreveu o nome
da função, input, seguido de parênteses. O programador fez o mesmo para chamar a função
print.
Para chamar uma função, você deve saber as três coisas a seguir:
-
O nome da função
-
Os parâmetros que a função aceita
-
O que a função faz
Essas três informações normalmente estão disponíveis em documentação online. Por exemplo, na referência online de
Python para a função input, pode-se ler o seguinte:
-
input(prompt) - Escreva o valor do parâmetro prompt na janela do terminal, leia uma linha digitada pelo usuário na janela do terminal, converta essa entrada para uma string e a retorne.
A partir desta breve descrição, sabemos o seguinte:
-
O nome da função é
input. -
A função aceita um parâmetro chamado prompt.
-
A função exibe o prompt no terminal, lê a entrada do usuário e retorna essa entrada para a função que a chamou.
Um parâmetro é um dado que uma função precisa para concluir sua tarefa. Na referência online da função
input, é possível observar que a função input tem um parâmetro chamado
prompt.
Um argumento é o valor que é passado através de um parâmetro para uma função. Isso significa que os parâmetros são listados na documentação de uma função e os argumentos são listados ao chamar uma função.
Para criar código que chama uma função, normalmente você deve fazer o seguinte:
-
Crie uma variável e use o operador de atribuição (=) para indicar qual valor ela vai armazenar.
-
Digite o nome da função seguido de um conjunto de parênteses.
-
Entre parênteses, digite os argumentos que serão passados para a função por meio de seus parâmetros.
Por exemplo, o código a seguir chama a função embutida input e passa a string
"Por favor, digite seu nome: " como argumento para o parâmetro prompt.
nome = input("Por favor, digite seu nome: ")
Quando uma função tem mais de um parâmetro e um programador escreve código para chamar essa função, os argumentos
quase sempre serão escritos na mesma ordem dos parâmetros. Considere a descrição da função embutida
round:
-
round(numero, ndigitos) - Retorna um numero arredondado com precisão de ndigitos após a casa decimal. Se
ndigitos for omitido ou for definido como
None, a funçãoroundretornará o número inteiro mais próximo.
Agora considere este código em Python que obtém um número de um usuário, arredonda esse número para dois dígitos depois do decimal e então exibe o número arredondado.
n = float(input("Por favor, digite um número: "))
r = round(n, 2)
print(r)
> python exemplo_2.py
Por favor, digite um número: 95.716
95.72
No exemplo anterior:
-
O código na linha 1 faz com que o computador chame a função embutida
inpute, em seguida, chame a função embutidafloat. -
A linha 2 faz com que o computador chame a função embutida
rounde passe dois argumentos. Note que a ordem dos argumentos corresponde à ordem dos parâmetros. Especificamente, o número a ser arredondado (n) é o primeiro argumento, enquanto o número de dígitos após a casa decimal (2) é o segundo argumento. -
A linha 3 faz com que o computador chame a função embutida
printpara exibir o número arredondado.
Argumentos Opcionais
Ao chamar uma função ou método, alguns argumentos são opcionais. Considere novamente a descrição da
função embutida round:
-
round(numero, ndigitos) - Retorna um numero arredondado com precisão de ndigitos após a casa decimal. Se
ndigitos for omitido ou for definido como
None, a funçãoroundretornará o número inteiro mais próximo de numero.
Na descrição, lemos que o segundo argumento é opcional. Se o programador não digitar um segundo argumento, o
valor no parâmetro numero será arredondado para um número inteiro. O próximo exemplo de código é
semelhante ao anterior. A única diferença é que na linha 2 do próximo exemplo, o programador digitou apenas
um argumento para a função round. Como o programador omitiu o segundo argumento, a função
round arredondará o número em seu primeiro parâmetro para um inteiro, conforme mostrado na saída
abaixo.
n = float(input("Por favor, digite um número: "))
r = round(n)
print(r)
> python exemplo_3.py
Por favor, digite um número: 95.716
96
Argumentos Nomeados
Em alguns casos, certos parâmetros são opcionais e, quando usados, precisam ser passados como argumentos
nomeados, ou seja, precedidos pelo nome do parâmetro correspondente. Por exemplo, na função
print:
-
print(*objects, sep=" ", end="\n", file=sys.stdout, flush=False) - Essa função exibe objetos no fluxo de texto (por padrão, a tela), separados por sep e finalizados por end. Os parâmetros sep, end, file e flush, são opcionais e, se fornecidos, precisam ser passados como argumentos nomeados.
Observe que a função print pode receber muitos objetos que serão exibidos. Opcionalmente, ela pode
receber parâmetros chamados sep, end, file e flush, que devem ser
nomeados quando usados. Por exemplo, este código chama a função print para exibir três palavras,
todas separadas por uma barra vertical (|). Observe os argumentos nomeados sep e flush.
x = "sol"
y = "lua"
z = "estrelas"
print(x, y, z, sep="|", flush=True)
> python exemplo_4.py sol|lua|estrelas
Como chamar uma função que está dentro de um módulo
Um módulo em Python é uma coleção de funções relacionadas.
A biblioteca padrão do Python inclui muitos módulos que
contêm mais funções, como o módulo math — que inclui as funções floor,
ceil e sqrt; e o módulo random — que inclui as funções
randint, choice e shuffle.
Considere a descrição da função sqrt que está no módulo padrão math:
-
math.sqrt(x) - Retorna a raiz quadrada de x.
A partir dessa breve descrição, sabemos o seguinte:
-
O nome do módulo que contém a função é
math. -
O nome da função é
sqrt. -
A função aceita um parâmetro chamado x.
-
A função calcula e retorna a raiz quadrada do número que está em x.
Para usar qualquer código que esteja em um módulo, você deve importar o módulo
no seu programa e preceder o nome da função com o nome do módulo.
Por exemplo, se você quiser chamar a função math.sqrt,
deve primeiro importar o módulo math e
depois digitar math. antes de sqrt, assim:
import math
r = math.sqrt(71)
print(r)
> python exemplo_5.py 8.426149773176359
Na função math.sqrt(x), x é o parâmetro definido na função, e o argumento que será
passado para esse parâmetro quando a função for chamada será 71. A função math.sqrt
calculará a raiz quadrada de 71 e retornará o valor resultante, que será então armazenado na variável
r. Você pode ler mais sobre os módulos padrão na documentação oficial da Biblioteca Padrão do Python.
Como Chamar um Método
Python é uma linguagem orientada a objetos e usa muitos métodos — que são funções ligadas a classes ou objetos. Embora este curso não aborde classes e objetos, chamar métodos em Python é algo comum e simples. Para isso, basta digitar o nome do objeto, seguido de um ponto e do nome do método.
Considere o exemplo 6, que obtém uma string do usuário, exibe a quantidade de caracteres e a mostra em maiúsculas.
# Exemplo 6
# Obtém uma string do usuário.
texto1 = input("Digite uma frase motivacional: ")
# Chama a função embutida len para obter
# o número de caracteres no texto.
comprimento = len(texto1)
# Chama o método string upper para converter
# texto1 em letras maiúsculas.
texto2 = texto1.upper()
# Chama a função embutida print para exibir
# o comprimento do texto e o texto em
# letras maiúsculas para o usuário ver.
print(comprimento, texto2)
> python exemplo_6.py
Digite uma frase motivacional: Levanta-te, toma o teu leito e anda.
36 LEVANTA-TE, TOMA O TEU LEITO E ANDA.
Na linha 6, o código chama a função integrada len; na linha 9, chama o método upper de
uma string.
Funções como len são chamadas pelo nome, seguido de parênteses com os argumentos.
Já métodos, como upper, exigem o nome do objeto (texto1), um ponto, o nome do método e,
se houver, os argumentos entre parênteses.
Um método pode receber argumentos, assim como uma função. No exemplo 6, linha 9, o método
upper é chamado sem argumentos — por isso, os parênteses estão vazios. Mesmo assim, eles precisam ser
digitados para que o método seja executado corretamente.
Em outras palavras, se você tentar chamar o método upper sem os parênteses, o Python não executará o
método, como neste caso:
texto2 = texto1.upper # NÃO chama o método upper
Em vez disso, o computador vai apenas guardar o método upper na variável texto2, sem
executá-lo. Esse tipo de comportamento só fará sentido quando você estudar programação funcional — por enquanto, o
que você quer é chamar o método, não apenas referenciá-lo.
Como Armazenar Um Valor Retornado
Todos os exemplos anteriores neste conteúdo de preparação usam o operador de atribuição (=) para armazenar o valor retornado de uma função em uma variável. Por exemplo:
texto = input("Digite uma frase motivacional: ")
Embora geralmente seja uma boa prática, não é obrigatório armazenar o valor retornado de uma função em uma variável. Às vezes, você o verá usado diretamente, como mostrado no exemplo 7, nas linhas 7, 10 e 12.
# Exemplo 7
import math
# Obtém um número do usuário.
numero = float(input("Digite um número: "))
# Chama a função math.sqrt e
# exibe imediatamente o valor retornado.
print(math.sqrt(numero))
# Chama a função math.sqrt novamente e
# usa seu valor retornado em uma instrução if.
if math.sqrt(numero) < 100:
print(f"A raiz quadrada é menor que 100.")
elif math.sqrt(numero) > 100:
print(f"A raiz quadrada é maior que 100.")
else:
print(f"A raiz quadrada é exatamente 100.")
> python exemplo_7.py
Digite um número: 675
25.98076211353316
A raiz quadrada é menor que 100.
Observe o exemplo 7 contém três instruções que chamam a função math.sqrt. Toda vez que o
computador chama uma função, ele executa o código que está dentro dessa função. No exemplo 7, como o
argumento é o mesmo em todas as três vezes que a função é chamada, o resultado retornado será o mesmo em todos os
casos. Portanto, seria mais rápido salvar o resultado em uma variável e reutilizá-la, como mostrado no
exemplo 8.
# Exemplo 8
import math
# Obtém um número do usuário.
numero = float(input("Digite um número: "))
# Chama a função math.sqrt e armazena seu
# valor retornado em uma variável para usar depois.
raiz = math.sqrt(numero)
print(f"A raiz quadrada é {raiz:.2f}")
if raiz < 100:
print(f"A raiz quadrada é menor que 100.")
elif raiz > 100:
print(f"A raiz quadrada é maior que 100.")
else:
print(f"A raiz quadrada é exatamente 100.")
> python exemplo_8.py
Digite um número: 675
A raiz quadrada é 25.98
A raiz quadrada é menor que 100.
Vídeo
O vídeo a seguir mostra um instrutor escrevendo um código em Python que chama funções embutidas.
Resumo
Uma função é um grupo de instruções que juntas executam uma tarefa. O computador não executará o código de uma função a menos que você escreva um código que chame essa função. Nesta aula, você aprendeu como chamar funções embutidas, funções que estão em um módulo e funções (métodos) que pertencem a um objeto.
-
Para chamar uma função embutida, escreva um código que siga este modelo:
nome_da_variavel = nome_da_funcao(arg1, arg2, … argN) -
Para chamar uma função de um módulo, importe o módulo e escreva o código que segue este modelo:
import nome_do_modulo nome_da_variavel = nome_do_modulo.nome_da_funcao(arg1, arg2, … argN) -
Para chamar um método, escreva um código que siga este modelo:
nome_da_variavel = nome_do_objeto.nome_do_metodo(arg1, arg2, … argN)
Atividade
Objetivo
Avaliar seu conhecimento sobre como chamar funções embutidas do Python e funções que estão em um módulo padrão do Python.
Declaração do Problema
Em nossa economia mundial moderna, muitos itens são fabricados em grandes fábricas, depois embalados em caixas e enviados para centros de distribuição e lojas de varejo. Uma pergunta comum entre funcionários que embalam produtos é “de quantas caixas precisamos?”
Tarefa
Uma empresa de manufatura precisa de um programa que ajude seus funcionários a empacotar itens fabricados em
caixas para envio. Escreva um programa em Python chamado caixas.py que solicite ao usuário dois
números inteiros:
-
o número de itens fabricados
-
o número de itens que o usuário empacotará por caixa
Seu programa deve calcular e exibir o número de caixas necessárias para armazenar os itens. Esse número deve ser inteiro. Observe que a última caixa pode conter menos itens do que as demais.
Documentação Útil
-
A função
math.ceil()arredonda um número para cima para o inteiro mais próximo que seja maior ou igual a um número.
Procedimento de Teste
Verifique se seu programa funciona corretamente seguindo cada etapa deste procedimento de teste:
-
Execute seu programa e digite as entradas mostradas abaixo. Certifique-se de que a saída do seu programa corresponda à saída abaixo.
> python caixas.py Digite o número de itens fabricados: 8 Digite o número de itens por caixa: 5 Para 8 itens, empacotando 5 itens por caixa, você precisará de 2 caixas. > python caixas.py Digite o número de itens fabricados: 25 Digite o número de itens por caixa: 4 Para 25 itens, empacotando 4 itens por caixa, você precisará de 7 caixas.
Exemplo de Solução
Quando terminar seu programa, consulte o exemplo de solução para comparar com o seu.
Primeiro, procure concluir o programa sem olhar o exemplo de solução. No entanto, se já tiver trabalhado nele por bastante tempo e ainda estiver com dificuldades, sinta-se à vontade para usá-lo como apoio para finalizar seu programa.
Ponderar
Durante esta tarefa, você escreveu um código que chama a função math.ceil(). O que a função
math.ceil() fez no seu programa? Se a função math.ceil() não existisse, teria sido mais
difícil de concluir esta tarefa?
Envio
Quando terminar, informe seu progresso no questionário do Canvas correspondente a esta atvidade.
Envio
Links Úteis:
- Voltar para: Visão Geral da Semana | Página Inicial