Introdução à Programação Aula 4 Definição de funções Pedro Vasconcelos DCC/FCUP 2015 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 1 / 28
Nesta aula... 1 Definição de funções 2 Funções que calculam resultados 3 Módulo turtle Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 2 / 28
Definição de funções Na aula passada vimos como usar as funções matemáticas pré-definidas Nesta aula vamos ver como definir novas funções Programação estruturada Decompor um problema em componentes mais simples até chegar às operações elementares. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 3 / 28
Definição de novas funções def nome(lista de parâmetros): primeira instrução segunda instrução. instrução final O início e fim da função são marcados pela indentação A lista de parâmetros pode ser vazia Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 4 / 28
Exemplo def refrao(): print("se um elefante incomoda muita gente") print("dois elefantes incomodam muito mais.") def repete_refrao(): refrao() refrao() Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 5 / 28
Exemplo (cont.) Vamos experimentar estas funções no interpretador: >>> refrao() Se um elefante incomoda muita gente Dois elefantes incomodam muito mais. >>> repete_refrao() Se um elefante incomoda muita gente Dois elefantes incomodam muito mais. Se um elefante incomoda muita gente Dois elefantes incomodam muito mais. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 6 / 28
Fluxo da execução 1 Começa na primeira instrução do programa 2 As instruções são executadas por ordem sequencial 3 A definição de uma função não altera fluxo de execução 4 A invocação de uma função 1 executa as instruções da definição por ordem 2 no final regressa ao ponto de onde partiu 5 Funções podem chamar outras funções Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 7 / 28
Parâmetros e argumentos Normalmente as funções usam argumentos: >>> import math >>> math.sin() Traceback (most recent call last): File "<stdin>", line 1, in? TypeError: sin() takes exactly 1 argument (0 given) O valor dos argumentos é associado a variáveis chamadas parâmetros Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 8 / 28
Exemplo do livro def print_twice(bruce): print(bruce) print(bruce) >>> print_twice( Spam ) Spam Spam >>> print_twice(5) 5 5 >>> print_twice(math.pi) 3.14159265359 3.14159265359 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 9 / 28
Funções que calculam resultados As funções podem calcular resultados O resultado deve ser indicado com a instrução return A instrução return termina a função e define o resultado Exemplo: calcular o volume V de uma esfera de raio r. V = 4 3 πr 3 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 10 / 28
Funções que calculam resultados (cont.) import math def volumes(r): V = 4/3 * math.pi * r**3 return V >>> volumes(1.0) 4.1887902047863905 >>> volumes(1.5) 14.137166941154067 >>> volumes(2.0) 33.510321638291124 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 11 / 28
Âmbito das variáveis Os parâmetros duma função são variáveis locais não são visíveis fora da função As variáveis definidas dentro da função também são locais Exemplo: >>> r = 42 >>> volumes(1) 4.1887902047863905 >>> r 42 >>> V NameError: name V is not defined Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 12 / 28
Âmbito das variáveis (cont.) As variáveis definidas fora das funções (globais) podem ser usadas dentro destas. Exemplo: uma função para acrescentar a taxa de IVA a um preço. taxa_iva = 0.23 def precofinal(valor): return valor*(1+taxa_iva) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 13 / 28
Documentação É boa idea documentar usando comentários e/ou docstrings. taxa_iva = 0.23 # taxa de IVA em percentagem def precofinal(valor): Acrescenta a taxa de IVA a um valor. Usa a variável global taxa_iva. return valor*(1+taxa_iva) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 14 / 28
Documentação (cont.) Os comentários e docstrings são para quem lê o código As docstrings são também usadas pelo sistema de ajuda. >>> help(precofinal) Help on function precofinal in module main : precofinal(valor) Acrescenta a taxa de IVA a um valor. Usa a variável global taxa_iva. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 15 / 28
Return ou print? return termina a execução da função e devolve um resultado print apenas imprime um resultado Só podemos usar um resultado se a função terminar com return: def f(x): return x*x print(f(f(3))) 81 def g(x): print(x*x) print(g(g(3)) 9 Erro Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 16 / 28
Módulo turtle Vamos fazer programas que desenham usando o módulo turtle: o programa controla um robot virtual (tartaruga); desloca-se para frente, para trás e roda sobre si próprio; usa uma caneta para deixar um rasto; muito simples, mas permite fazer desenhos impressionantes. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 17 / 28
Primeiros passos Devemos começar por importar o módulo: >>> import turtle Os comandos têm a forma turtle.comando(...): >>> turtle.clear() # limpar a janela >>> turtle.forward(100) # avançar 100 pixels >>> turtle.left(90) # rodar 90 graus à esquerda >>> turtle.forward(200) # avançar 200 pixels Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 18 / 28
Primeiros passos (cont.) Em alternativa, podemos usar >>> from turtle import * e omitir o nome do módulo: >>> clear() >>> forward(100) >>> left(90) >>> forward(200) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 19 / 28
Comando principais forward(n) avançar n pixels backward(n) retroceder n pixels left(α) rodar α graus à esquerda right(α) rodar α graus à direita color(c) mudar a cor do traço pensize(n) mudar a largura do traço penup() levantar a caneta pendown() baixar a caneta speed(n) mudar a velocidade da tartaruga clear() limpar a janela reset() limpar a janela e re-inicializar a tartaruga Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 20 / 28
Desenhar um quadrado Vamos definir uma função sem argumentos para desenhar um quadrado com 100 pixels de lado. Desenhar quatro lados, rodando 90 para a esquerda após cada lado Alternativa: também poderiamos rodar para a direita Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 21 / 28
Desenhar um quadrado (cont.) def quadrado(): forward(100) # primeiro lado left(90) forward(100) # segundo lado left(90) forward(100) # terceiro lado left(90) forward(100) # quarto lado left(90) # terminar na orientação original Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 22 / 28
Evitando repetições Repetimos quatro vezes as instruções: forward(100) left(90) Podemos evitar a repetição usando um ciclo for Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 23 / 28
Evitando repetições (cont.) def quadrado(): for lado in [1,2,3,4]: forward(100) left(90) # repetir 4 vezes A variável lado não é usada dentro do ciclo Poderiamos usar qualquer outra lista de quatro valores Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 24 / 28
Alternativas def quadrado(): for i in [1,2,3,4]: forward(100) left(90) def quadrado(): for i in range(4): # 0, 1, 2, 3 forward(100) left(90) def quadrado(): for c in [ red, green, blue, black ]: color(c) forward(100) left(90) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 25 / 28
Generalizando Vamos agora generalizar a função para desenhar um quadrado de qualquer lado. Basta tomar a medida do lado como um parâmetro da função. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 26 / 28
Generalizando (cont.) def quadrado(lado): "Desenhar um quadrado dado o comprimento do lado." for i in range(4): forward(lado) left(90) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 27 / 28
Exemplo final espiral.py from turtle import * def quadrado(lado): for c in [ red, blue, green, black ]: color(c) forward(lado) left(90) reset() speed(10) for i in range(36): quadrado(50+i*5) left(10) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 4 Definição de funções 2015 28 / 28