Programação I Aula 4 Definição de procedimentos e...

28
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

Transcript of Programação I Aula 4 Definição de procedimentos e...

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