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.