Programação I Aula 4 Definição de procedimentos e funções Pedro Vasconcelos DCC/FCUP 2018 Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 Definição de procedimentos e funções 2018 1 / 28
Nesta aula... 1 Definição de procedimentos e funções 2 Retornar resultados 3 Módulo turtle Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 Definição de procedimentos e funções 2018 2 / 28
Definição de procedimentos e funções Na aula passada vimos como usar as funções matemáticas pré-definidas Nesta aula vamos ver como definir novos procededimentos e funções Programação estruturada Decompor um problema em procedimentos mais simples até chegar às operações elementares. Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 Definição de procedimentos e funções 2018 3 / 28
Definições def nome(lista de parâmetros): primeira instrução segunda instrução. instrução final A lista de parâmetros pode ser vazia O início e fim do procedimento são marcados pela indentação Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 Definição de procedimentos e funções 2018 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) Programação I Aula 4 Definição de procedimentos e funções 2018 5 / 28
Exemplo (cont.) Experimentando 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) Programação I Aula 4 Definição de procedimentos e funções 2018 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 um procedimento não altera fluxo de execução 4 A invocação de um procedimento: 1 executa as instruções da definição por ordem; 2 no final: continua a execulão do ponto original. 5 Procedimentos podem chamar outras procedimentos Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 Definição de procedimentos e funções 2018 7 / 28
Parâmetros e argumentos Procedimentos podem necessitar de 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) Programação I Aula 4 Definição de procedimentos e funções 2018 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) Programação I Aula 4 Definição de procedimentos e funções 2018 9 / 28
Procedimentos que retornam resultados Funções são procedimentos que calculam um resultado O resultado deve ser indicado com a instrução return A instrução return termina o procedimento Exemplo: calcular o volume V de uma esfera de raio r. V = 4 3 πr 3 Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 Definição de procedimentos e funções 2018 10 / 28
Procedimentos que retornam resultados (cont.) import math def volume(r): V = 4/3 * math.pi * r**3 return V >>> volume(1.0) 4.1887902047863905 >>> volume(1.5) 14.137166941154067 >>> volume(2.0) 33.510321638291124 Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 Definição de procedimentos e funções 2018 11 / 28
Âmbito das variáveis Os parâmetros são variáveis locais não existem fora do bloco da definição As variáveis definidas dentro do bloco também são locais Exemplo: >>> r = 42 >>> volume(1) 4.1887902047863905 >>> r 42 >>> V NameError: name V is not defined Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 Definição de procedimentos e funções 2018 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 preçofinal(valor): return valor*(1+taxa_iva) Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 Definição de procedimentos e funções 2018 13 / 28
Documentação É boa idea documentar usando comentários e/ou docstrings. taxa_iva = 0.23 # taxa de IVA em percentagem def preçofinal(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) Programação I Aula 4 Definição de procedimentos e funções 2018 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(preçofinal) Help on function preçofinal in module main : preçofinal(valor) Acrescenta a taxa de IVA a um valor. Usa a variável global taxa_iva. Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 Definição de procedimentos e funções 2018 15 / 28
Return ou print? return termina a execução e define o resultado da função; print imprime um resultado (no terminal ou janela de texto). Só podemos usar o resultado se a função efetuar 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) Programação I Aula 4 Definição de procedimentos e funções 2018 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) Programação I Aula 4 Definição de procedimentos e funções 2018 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) Programação I Aula 4 Definição de procedimentos e funções 2018 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) Programação I Aula 4 Definição de procedimentos e funções 2018 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) Programação I Aula 4 Definição de procedimentos e funções 2018 20 / 28
Desenhar um quadrado Vamos definir um procedimento para desenhar um quadrado com 100 pixels de lado. Desenhar quatro lados, rodando 90 para a esquerda após cada lado Alternativa: poderiamos rodar para a direita Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 Definição de procedimentos e funções 2018 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) Programação I Aula 4 Definição de procedimentos e funções 2018 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) Programação I Aula 4 Definição de procedimentos e funções 2018 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 com 4 valores... Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 Definição de procedimentos e funções 2018 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) Programação I Aula 4 Definição de procedimentos e funções 2018 25 / 28
Generalizando Vamos generalizar o procedimento para desenhar um quadrado de lado dado. Basta tomar a medida do lado como um parâmetro. Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 Definição de procedimentos e funções 2018 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) Programação I Aula 4 Definição de procedimentos e funções 2018 27 / 28
Exemplo: uma espiral 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) # desenhar 36 quadrados... #...de lado variável # ângulo entre os quadrados Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 Definição de procedimentos e funções 2018 28 / 28