Introdução à Programação Aula 11 Mais sobre …pbv/aulas/ipm/teorica-11.pdfNesta aula Vamos ver...
Transcript of Introdução à Programação Aula 11 Mais sobre …pbv/aulas/ipm/teorica-11.pdfNesta aula Vamos ver...
Introdução à ProgramaçãoAula 11 — Mais sobre ciclos e iteração
Pedro Vasconcelos
DCC/FCUP
2015
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 1 / 26
Nesta aula
Vamos ver a iteração em Python mais detalhadamente.
1 Ciclos while
2 Ciclos for
3 Saída e continuação
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 2 / 26
Iteração
Repetir instruções um número variável de vezesPara exprimir computação, tabelar uma função, etc.
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 3 / 26
Ciclos while
while condição:...instruções a repetir...
Repete as instruções enquanto a condição for verdadeiraA condição é re-avaliada após cada iteraçãoO corpo do ciclo deve modificar alguma variável da condição
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 4 / 26
Exemplo
def crescente(n):i = 1while i<n:
# repete estas instruçõesprint(i)i = i+1
# após o fim do cicloprint(’fim’)
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 5 / 26
Exemplo (cont.)
>>> crescente(10)123456789fim
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 6 / 26
Modificar variáveis
Muitas vezes necessitamos de incrementar ou decrementar variáveis.
...i = i+1...
Esta atribuição pode ser abreviada:
...i += 1...
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 7 / 26
Modificar variáveis (cont.)
Mais geralmente:
v = v + k −→ v += kv = v - k −→ v -= kv = v * k −→ v *= kv = v / k −→ v /= k
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 8 / 26
Um ciclo while pode não terminar
def repete():n = 1while True: # repete indefinidamente
print(’Se’,n,’elefantes incomodam muita gente’)print(n+1,’elefantes incomodam muito mais!’)n += 1
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 9 / 26
Sequência de Collatz
Nem sempre é fácil concluir que um ciclo while não termina.
def sequencia(n):while n != 1:
print(n)if n%2==0: # n é par
n = n//2else: # n é ímpar
n = 3*n+1
Não sabemos se esta função termina para todo n > 0.
http://en.wikipedia.org/wiki/Collatz_conjecture
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 10 / 26
Ciclos for
for variável in sequência:...instruções a repetir...
Repete instruções para com variável tomar sucessivos valores dasequênciaO número de iterações está limitado pelo comprimento dasequência
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 11 / 26
Exemplo
def crescente(n):# i vai de 1 até n-1 por incrementos de 1for i in range(1, n):
print(i)# fim do cicloprint(’fim’)
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 12 / 26
Exemplo (cont.)
>>> crescente(10)123456789fim
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 13 / 26
Sequências aritméticas
A função range(a,b, k) gera sequências em progressão aritmética
a, a + k , a + 2k , . . .
cujos valores são menores que b.
>>> list(range(10))[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> list(range(1,11))[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>> list(range(0, 30, 5))[0, 5, 10, 15, 20, 25]
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 14 / 26
Factorial iterativo
n! = 1× 2× · · · × (n − 1)× n
1 Inicialmente: p = 12 repetir para i de 2 até n: p ← p × i3 No fim do ciclo o valor de p é n!
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 15 / 26
Factorial usando um ciclo for
def factorial(n):# p acumula o produto 1*2*...*np = 1# repetir para i de 2 até nfor i in range(2, n+1):
p *= i# resultado é o valor de preturn p
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 16 / 26
Factorial usando um ciclo while
def factorial(n):# p acumula o produto 1*2*...*np = 1# repetir para i de 2 até ni = 2while i<=n:p *= ii += 1
# resultado é o valor de preturn p
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 17 / 26
Factorial usando um ciclo while (cont.)
Mais geralmente:
Podemos sempre re-escrever um ciclo for num ciclo while.
Nem sempre podemos re-escrever um ciclo while como um ciclofor (exemplo: a função Collatz).
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 18 / 26
Saída e continuação num ciclo
Duas instruções que permitem alterar a execução de um ciclo:break sair a meio do ciclo
continue passar à próxima iteração
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 19 / 26
Break com um ciclo for
for i in [12, 16, 17, 24, 29]:if i % 2 == 1: # se é ímpar
break # ... termina o cicloprint(i)
print("fim")
Resultado:
1216fim
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 20 / 26
Continue com um ciclo for
for i in [12, 16, 17, 24, 29, 30]:if i % 2 == 1: # se é impar
continue # ...passa ao próximoprint(i)
print("fim")
Resultado:
12162430fim
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 21 / 26
Saída de um ciclo while
O teste do ciclo while ocorre antes da execução do corpo.
Podemos usar break para colocar um teste no corpo do ciclo.
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 22 / 26
Exemplo: teste no meio do corpo
total = 0while True:
resposta = input("Entre um número (ou vazio)")if resposta == ’’:
break # termina o ciclototal += int(resposta)
print("Total = ", total)
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 23 / 26
Exemplo: teste no fim do corpo
import random# escolher aleatoriamente entre [1, 1000]number = random.randint(1, 1000)guesses = 0while True:
guess = int(input("Número entre 1 e 1000: "))guesses += 1if guess > number:
print(guess, "é alto.")elif guess < number:
print(guess, "é baixo.")else:
breakprint(guess, "é correto.")print(guesses, "tentativas.")
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 24 / 26
Sumário
while repetir enquanto a condição é verdadeirafor repetir para uma sequência de valores
Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 11 — Mais sobre ciclos e iteração 2015 25 / 26