1 of 18

Funções e Procedimentos

2 of 18

Modularização

  • Até o momento todos o sistemas que construímos possuíam somente um único programa. Isso faz com que tenhamos:
    • Programas cada vez maiores
    • Repetição de trechos de código
  • Como atacar um problema de cada vez?
    • dividir-para-conquistar: dividir problemas em subproblemas menores e mais tratáveis e, se ainda for muito complexo, dividir em subproblemas ainda menores e assim sucessivamente.
  • Como evitar repetições?
    • Modularização

3 of 18

Modularização

  • Em Python, é possível criar módulos de código que desempenham alguma tarefa específica. Esse módulos são chamados de funções/procedimentos.
    • Funções: retornam valores;
    • Procedimentos: não retornam valores, também chamadas de funções infrutíferas ou funções sem retorno.
  • Um programa pode possuir várias funções/procedimentos, mas todos os programas em Python devem possuir um código do programa principal que esteja fora de qualquer função, pois é ele quem controla a execução das funções.

​

4 of 18

Vantagens da Modularização

  • Evitar a repetição do mesmo trecho de código;
  • Reaproveitar código existente;
  • Facilitar modificações;
  • Organizar o programa em partes que podem ser compreendidas isoladamente;
  • Melhorar a estruturação do programa;
  • Facilitar o entendimento do programa.

​

5 of 18

Funções/Procedimentos

  • Também chamados de Subprogramas;
  • Um subprograma não pode ser executado diretamente;
  • Ele precisa ser "invocado" ou "chamado" pelo programa principal ou por outro subprograma;
  • Esta chamada desvia o fluxo de controle para o subprograma.

6 of 18

  • Desvio do fluxo de controle

6

Instrução

Instrução

Instrução

Instrução

Instrução

Chamada ao

Subprograma

programa principal

subprograma

Funções/Procedimentos

7 of 18

Funções/Procedimentos

  • Toda função em Python deve ser definida antes se seu uso no programa principal.
  • A definição da função deve conter a palavra-chave def, o nome da função (dado pelo programador), os parâmetros que precisem ser fornecidos em uma chamada da função e o sinal de dois pontos (:).
  • O corpo da função contém a implementação das tarefas da função e fica indentado em relação ao def.
  • Estrutura Geral:

def nome_da_função(lista de parâmetros):

# corpo da função

8 of 18

  • Lista de parâmetros
    • Após o nome da função e deve estar entre parênteses;
    • Na declaração, basta indicar os parâmetros separados por vírgula;
    • É possível não haver parâmetros em uma função.
  • Retorno
    • O comando return indica o valor retornado pela função;
    • Este valor pode ser representado por uma constante, uma variável ou por expressões;
    • Uma função encerra assim que encontra o comando return;
    • Se não houver return, a função finalize quando chega ao final do seu corpo (parte indentada à definição da função).

8

Funções/Procedimentos

9 of 18

Funções/Procedimentos

  • Toda função deve ser chamada para que o código que esta descreve seja executado. Quando uma função é chamada, o interpretador Python desvia a execução para os comandos descritos pela função e, ao final, retorna ao ponto em que havia parado.
  • Os parâmetros que uma função deve receber são valores que ela necessitará para executar sua tarefa, mas que são desconhecidos por ela e conhecidos pela função chamadora.

10 of 18

Exemplo 1 – Procedimento sem parâmetros

​

​

def imprimeMensagem():

print ("Inicio da função.")

print ("Alô mundo!")

print (“Tchau!")

​

​

​

​

​

print ("Início do programa principal.")

print ("Chamada da função.")

imprimeMensagem()

print ("Fim do programa.")

​

Chamada da Função

Corpo da Função

Nesse momento o interpretador Python desvia sua execução para o corpo da função.

11 of 18

Passagem de Parâmetros

  • Passagem de parâmetros por valor (tipo padrão):
    • Passagem do conteúdo da variável;
    • Parâmetro do mesmo tipo da variável;
    • Cada variável passada no momento da chamada será copiada para o parâmetro correspondente da função (na ordem da declaração);
    • Independência entre variáveis e parâmetros;
    • Mudanças em parâmetros de tipos primitivos (inteiros, reais, strings) não afetam as variáveis.
    • Exceções: mais à frente, veremos que mudanças em parâmetros como listas, dicionários e objetos mudam as variáveis (passagem por referência).

​

12 of 18

Exemplo 2 – Procedimento com parâmetros

  • Escreva um programa que contenha uma função. A função deve receber como parâmetros dois números inteiros e deve calcular e imprimir a soma destes valores.
  • Vamos ver como faríamos sem a função:

num1 = int(input("Digite um número inteiro: "))

num2 = int(input("Digite outro número inteiro: "))

​

soma = num1 + num2

print("Soma = %d" % soma)

​

Esta tarefa será executada pela

função que vamos criar

13 of 18

  • Escreva um programa que contenha uma função de usuário. A função deve receber como parâmetros dois números inteiros e deve calcular e imprimir a soma destes valores.

def calculaSoma(num1, num2):

soma = num1 + num2

print("Soma = %d" % soma)

​

​

​

# programa principal

​

num1 = int(input("Digite um número inteiro: "))

num2 = int(input("Digite outro número inteiro: "))

calculaSoma(num1, num2) # Chamada da Função

​

Corpo da Função

Exemplo 2 – Procedimento com parâmetros

14 of 18

​

​

​

​

def calculaSoma(n1, n2):

soma = n1 + n2

print("Soma = %d" % soma)

​

​

# programa principal

​

num1 = int(input("Digite um número inteiro: "))

num2 = int(input("Digite outro número inteiro: "))

calculaSoma(num1, num2)

​

Os parâmetros não precisam ter o mesmo nome das variáveis do programa principal

Exemplo 2 – Procedimento com parâmetros

15 of 18

Exemplo 3 – Função com retorno

  • Escreva um programa que contenha uma função. A função deve receber como parâmetros dois números inteiros e deve calcular e retornar a soma destes valores. A função principal deve imprimir o resultado da soma.

def calculaSoma(n1, n2):

soma = n1 + n2

return soma

​

# programa principal

​

num1 = int(input("Digite um número inteiro: "))

num2 = int(input("Digite outro número inteiro: "))

resposta = calculaSoma(num1, num2)

print("Soma = %d" % resposta)

​

16 of 18

Exemplo 4 – Função com retorno

  • Escreva um programa que contenha uma função que receba uma nota de um aluno e retorne o seu conceito. A – se a nota estiver entre 9 e 10, B – se a nota for menor que 9 e maior ou igual a 8, C – se a nota for menor que 8 e maior ou igual a 7, D – se a nota for menor que 7 e maior ou igual a 5, E – se a nota for menor que 5. A função principal deve imprimir o valor retonado.

# programa principal

nota = float(input("Digite a nota: "))

conceito = calculaConceito(nota)

print("Conceito: %s" % conceito)

def calculaConceito(n):

if n >= 9 and n <= 10:

return 'A'

elif n >= 8 and n < 9:

return 'B'

elif n >= 7 and n < 8:

return 'C'

elif n >= 5 and n < 7:

return 'D'

else:

return 'E'

​

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

17 of 18

Exemplo 4 – Teste de mesa

  • Escreva um programa que contenha uma função que receba uma nota de um aluno e retorne o seu conceito. A – se a nota estiver entre 9 e 10, B – se a nota for menor que 9 e maior ou igual a 8, C – se a nota for menor que 8 e maior ou igual a 7, D – se a nota for menor que 7 e maior ou igual a 5, E – se a nota for menor que 5. A função principal deve imprimir o valor retonado.

Linha

nota

conceito

Função

13

7.0

?

�

14

7.0

?

Chamada:

calculaconceito

14

7.0

‘C’

�

15

7.0

‘C’

saída ‘C’

Linha

n

Retorno

1

7.0

�

2

7.0

�

4

7.0

�

6

7.0

�

7

7.0

‘C’

calculaconceito

main/principal

18 of 18

Exercícios

  1. Escreva um programa que contenha uma função que receba um número representando uma temperatura em graus Fahrenheit e calcule e imprima a temperatura em Celsius. Obs: C=(5/9)*(F-32).
  2. Escreva um programa que contenha uma função que receba dois números e retorne verdadeiro ou falso indicando se o primeiro número é divisível pelo segundo. A função principal deve imprimir uma mensagem apropriada de acordo com o resultado da função.
  3. Escreva um programa que contenha um único procedimento que calcula a soma, a diferença e o produto entre dois números inteiros. A leitura dos dois inteiros deve ser feita pelo programa principal.