View
222
Download
0
Category
Preview:
Citation preview
Programação IAula 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áticaspré-definidasNesta aula vamos ver como definir novos procededimentos efunções
Programação estruturadaDecompor 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çãosegunda instrução...instrução final
A lista de parâmetros pode ser vaziaO 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 genteDois elefantes incomodam muito mais.
>>> repete_refrao()Se um elefante incomoda muita genteDois elefantes incomodam muito mais.Se um elefante incomoda muita genteDois 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 programa2 As instruções são executadas por ordem sequencial3 A definição de um procedimento não altera fluxo de execução4 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 chamadasparâ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’)SpamSpam>>> print_twice(5)55>>> print_twice(math.pi)3.141592653593.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 resultadoO resultado deve ser indicado com a instrução returnA instrução return termina o procedimento
Exemplo: calcular o volume V de uma esfera de raio r .
V =43πr3
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**3return 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 blocoda definiçãoAs variáveis definidas dentro do bloco também são locais
Exemplo:
>>> r = 42>>> volume(1)4.1887902047863905>>> r42>>> VNameError: 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 usadasdentro 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))
⇓
9Erro
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 controlaum robot virtual(tartaruga);desloca-se para frente,para trás e roda sobresi próprio;usa uma caneta paradeixar um rasto;muito simples, maspermite fazer desenhosimpressionantes.
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 pixelsbackward(n) retroceder n pixels
left(α) rodar α graus à esquerdaright(α) rodar α graus à direitacolor(c) mudar a cor do traço
pensize(n) mudar a largura do traçopenup() levantar a caneta
pendown() baixar a canetaspeed(n) mudar a velocidade da tartaruga
clear() limpar a janelareset() 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 com100 pixels de lado.
Desenhar quatro lados, rodando 90◦ para a esquerda após cadalado
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 ladoleft(90)forward(100) # segundo ladoleft(90)forward(100) # terceiro ladoleft(90)forward(100) # quarto ladoleft(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]: # repetir 4 vezes
forward(100)left(90)
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 delado 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.pyfrom 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): # desenhar 36 quadrados...
quadrado(50+i*5) # ...de lado variávelleft(10) # ângulo entre os quadrados
Pedro Vasconcelos (DCC/FCUP) Programação I Aula 4 — Definição de procedimentos e funções 2018 28 / 28
Recommended