Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta...

26
Programação I Aula 11 — Mais sobre ciclos e iteração Pedro Vasconcelos DCC/FCUP 2017 Pedro Vasconcelos (DCC/FCUP) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 1 / 26

Transcript of Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta...

Page 1: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

Programação IAula 11 — Mais sobre ciclos e iteração

Pedro Vasconcelos

DCC/FCUP

2017

Pedro Vasconcelos (DCC/FCUP) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 1 / 26

Page 2: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

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) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 2 / 26

Page 3: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

Iteração

Repetir instruções um número variável de vezesPara exprimir computação, tabelar uma função, etc.

Pedro Vasconcelos (DCC/FCUP) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 3 / 26

Page 4: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

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) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 4 / 26

Page 5: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

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) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 5 / 26

Page 6: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

Exemplo (cont.)

>>> crescente(10)123456789fim

Pedro Vasconcelos (DCC/FCUP) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 6 / 26

Page 7: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

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) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 7 / 26

Page 8: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

Modificar variáveis (cont.)

Mais geralmente:

v = v + k −→ v += kv = v - k −→ v -= kv = v * k −→ v *= kv = v / k −→ v /= k

Estes operadores podem tornar o program mais díficil de ler.

Recomendação: não usar nos vossos programas.

Pedro Vasconcelos (DCC/FCUP) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 8 / 26

Page 9: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

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) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 9 / 26

Page 10: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

Sequência de Collatz

Nem sempre é fácil determinar se um ciclo while termina.

def sequencia(n):while n != 1:

print(n)if n%2==0: # n é par

n = n//2else: # n é ímpar

n = 3*n+1

Niguém provou que esta função termina para qualquer n > 0 (nemencontrou um contra-exemplo).

http://en.wikipedia.org/wiki/Collatz_conjecture

Pedro Vasconcelos (DCC/FCUP) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 10 / 26

Page 11: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

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) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 11 / 26

Page 12: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

Exemplo

def crescente(n):# i percorre valores 1 até n-1 de 1 em 1for i in range(1, n):

print(i)# fim do cicloprint(’fim’)

Pedro Vasconcelos (DCC/FCUP) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 12 / 26

Page 13: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

Exemplo (cont.)

>>> crescente(10)123456789fim

Pedro Vasconcelos (DCC/FCUP) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 13 / 26

Page 14: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

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) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 14 / 26

Page 15: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

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) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 15 / 26

Page 16: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

Factorial usando um ciclo for

def factorial(n):p = 1 # p acumula o produtofor i in range(2, n+1): # i vai de 2 até n

p = p * i# final do ciclo: p == 1*2*...*nreturn p

Pedro Vasconcelos (DCC/FCUP) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 16 / 26

Page 17: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

Factorial usando um ciclo while

def factorial(n):p = 1 # p acumula o produtoi = 2 # i vai de 2 até nwhile i<=n:p = p * ii = i + 1

# final do ciclo: p == 1*2*...*nreturn p

Pedro Vasconcelos (DCC/FCUP) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 17 / 26

Page 18: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

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) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 18 / 26

Page 19: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

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

Além disso:return termina a função e retorna o resultado (e, portanto,

também interrompe qualquer ciclo)

Pedro Vasconcelos (DCC/FCUP) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 19 / 26

Page 20: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

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) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 20 / 26

Page 21: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

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) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 21 / 26

Page 22: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

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) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 22 / 26

Page 23: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

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) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 23 / 26

Page 24: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

Exemplo: teste no fim do corpo

import random# escolher um inteiro 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) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 24 / 26

Page 25: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

Sumário

while repetição controlada por uma condiçãofor repetir para uma sequência de valores

Pedro Vasconcelos (DCC/FCUP) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 25 / 26

Page 26: Programação I Aula 11 Mais sobre ciclos e iteraçãopbv/aulas/programacaoI/teorica-11.pdfNesta aula Vamos ver a iteração em Python mais detalhadamente. 1 Ciclos while 2 Ciclos

Que tipo de ciclo usar?

Ciclo for 1 iterar sobre sequências aritméticas;2 iterar sobre listas ou tuplos.

Ciclo while nos outros casos.

Pedro Vasconcelos (DCC/FCUP) Programação I Aula 11 — Mais sobre ciclos e iteração 2017 26 / 26