Computação 1 Aula 10 Teórica professor: Leonardo Carvalho
Problema Como escrever a função exibe_ate, para obter o resultado abaixo: frase1 = 'Percebe ivair a petulancia do cavalo' frase2 = 'Elementar meu caro Watson!' exibe_ate(frase1, 'odu') turtle.goto(0, -40) exibe_ate(frase2, 'odu') 2
Solução def exibe_ate(frase, limites): '''Exibe uma frase ate encontrar um caractere em limites.''' for x in frase: if x in limites: break turtle.write(x, True, font=('arial', 20, 'normal')) 3
break for x in sequencia:... if condicao: break... O comando break interrompe a execução da repetição 4
break break também pode ser utilizado com while while condicao1:... if condicao2: break... 5
Exemplo Sorteia distância e ângulo até que a distância sorteada seja exatamente igual a 15: import turtle import random turtle.speed('fastest') n = random.randint(10, 30) while n!= 15: turtle.forward(n) ang = random.randint(-30, 30) turtle.left(ang) n = random.randint(10, 30) turtle.done() 6
Exemplo Sorteia distância e ângulo até que a distância sorteada seja exatamente igual a 15: import turtle import random turtle.speed('fastest') while True: n = random.randint(10, 30) if n == 15: break turtle.forward(n) ang = random.randint(-30, 30) turtle.left(ang) turtle.done() 7
break em laços aninhados turtle.up() for i in range(10): for j in range(10): if i == j: break turtle.goto(20*i, 20*j) turtle.dot(10) 8
9
Exemplo import turtle import random def desenho_louco(l): for x in L: r = random.random() g = random.random() b = random.random() turtle.color(r, g, b) turtle.forward(x) ang = random.randint(-80, 80) turtle.left(ang) 10
Exemplo... turtle.speed('fastest') turtle.hideturtle() desenho_louco([30, 18, 12, 32, 47, 29, 27, 20]) turtle.done() 11
Pergunta Como ignorar os valores de L que sejam múltiplos de 3? Solução 1: def desenho_louco(l): for x in L: if x%3!=0: r = random.random() g = random.random() b = random.random() turtle.color(r, g, b) turtle.forward(x) ang = random.randint(-80, 80) turtle.left(ang) 12
Pergunta Como ignorar os valores de L que sejam múltiplos de 3? Solução 2: def desenho_louco(l): for x in L: if x%3==0: continue r = random.random() g = random.random() b = random.random() turtle.color(r, g, b) turtle.forward(x) ang = random.randint(-80, 80) turtle.left(ang) 13
continue for x in sequencia:... if condicao: continue... O comando continue "pula" para o próximo elemento da repetição, ignorando todos os comandos que vêm em seguida. 14
continue em laços aninhados turtle.up() for i in range(10): for j in range(10): if i == j: continue turtle.goto(20*i, 20*j) turtle.dot(10) 15
continue com while Continue também funciona com while Mas tenha muito cuidado para não entrar em loop infinito! s = 0 i = 1 while i <= 10: if i == 5: Se executar o continue o programa volta para a linha do while, sem executar i += 1 continue s += i**2 i += 1 16
17
Matrizes 18
Matrizes Como representar uma matriz como esta no Python? 19
Matrizes Solução: listas de listas! M = [ [5, 8, 1, 3], [4, 6, 0, 1], [1, 1, 2, 0] ] Para enxergar melhor podemos escrever: M = [ [5, 8, 1, 3], [4, 6, 0, 1], [1, 1, 2, 0] ] 20
Matrizes Por que listas de listas? Podemos usar indexação! >>>...... >>> [5, >>> 5 >>> 8 >>> 0 M = [ [5, 8, 1, 3], [4, 6, 0, 1], [1, 1, 2, 0] ] M[0] 8, 1, 3] M[0][0] M[0][1] M[1][2] 21
Matrizes >>> M = [ [5, 8, 1,... [4, 6, 0,... [1, 1, 2, >>> M[0][3] = 10 >>> M[1][2] = 20 >>> M[2][0] = 60 >>> M [[5, 8, 1, 10], [4, 3], 1], 0] ] 6, 20, 1], [60, 1, 2, 0]] 22
Matrizes Como obter a dimensão de uma matriz? >>> M = [ [5, 8, 1, 3],... [4, 6, 0, 1],... [1, 1, 2, 0] ] >>> len(m) 3 # numero de linhas >>> len(m[0]) 4 # numero de colunas 23
E se... E se as linhas não tiverem o mesmo número de elementos? M = [ [5, 8, 1, 3], [4, 6, 1], [1, 0] ] Neste caso não vamos considerar M uma matriz. 24
Suposição Quando falarmos em matrizes, vamos sempre supor que o mundo é perfeito e maravilhoso todas as linhas têm o mesmo número de elementos 25
Exercício Escreva uma função que recebe dois parâmetros m, n, e retorna uma matriz m por n preenchida por zeros. >>> matriz_zeros(4, 3) [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> matriz_zeros(6, 4) [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] >>> matriz_zeros(2, 1) [[0], [0]] 26
Solução def matriz_zeros(m, n): '''Retorna uma matriz m por n preenchida por zeros.''' A = [] for i in range(m): linha = [] for j in range(n): linha.append(0) A.append(linha) return A 27
Exercício Escreva uma função que recebe dois parâmetros m, n, e retorna uma matriz m por n preenchida por valores inteiros aleatórios entre 0 e 9. >>> matriz_aleatorios(3, 2) [[0, 1], [6, 5], [2, 9]] >>> matriz_aleatorios(3, 2) [[7, 2], [1, 5], [2, 8]] >>> matriz_aleatorios(5, 3) [[7, 9, 6], [7, 2, 1], [2, 8, 3], [0, 3, 9], [9, 3, 7]] >>> matriz_aleatorios(2, 4) [[7, 6, 2, 4], [4, 0, 5, 0]] 28
Solução import random def matriz_aleatorios(m, n): '''Retorna uma matriz m por n preenchida por valores aleatorios.''' A = [] for i in range(m): linha = [] for j in range(n): x = random.randint(0, 9) linha.append(x) A.append(linha) return A 29
Exercício Escreva uma função que recebe um parâmetro n, e retorna a matriz identidade de ordem n. >>> matriz_identidade(3) [[1, 0, 0], [0, 1, 0], [0, 0, 1]] >>> matriz_identidade(4) [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]] >>> matriz_identidade(2) [[1, 0], [0, 1]] >>> matriz_identidade(1) [[1]] 30
Solução def matriz_identidade(n): '''Retorna a matriz identidade de ordem n.''' A = [] for i in range(n): linha = [] for j in range(n): if i == j: linha.append(1) else: linha.append(0) A.append(linha) return A 31
Exercício Escreva uma função que recebe uma matriz A e desenha esta matriz usando turtle. turtle.speed('fastest') turtle.hideturtle() A = [ [3, 1, 4], [8, 9, 0], [0, 1, 2], [5, 5, 6] ] desenha_matriz(a) turtle.done() 32
Solução def desenha_matriz(a): '''Desenha uma matriz A.''' m = len(a) n = len(a[0]) turtle.up() for i in range(m): for j in range(n): turtle.goto(30*j, -20*i) turtle.write(a[i][j], font=('arial', 14, 'normal')) 33
Exercício Escreva uma função que recebe uma matriz A e uma posição x, y e desenha esta matriz de forma que o termo A[0][0] apareça na posição x,y. turtle.speed('fastest') turtle.hideturtle() A = matriz_aleatorios(5, 7) B = matriz_identidade(12) desenha_matriz(a, -200, 200) desenha_matriz(b, 50, 200) turtle.done() 34
Solução def desenha_matriz(a, x, y): '''Desenha uma matriz A na posicao x,y.''' m = len(a) n = len(a[0]) turtle.up() for i in range(m): for j in range(n): turtle.goto(x+30*j, y-20*i) turtle.write(a[i][j], font=('arial', 14, 'normal')) 35
Exercício Escreva uma função que recebe uma matriz A e retorna a matriz transposta de A. A = [ [3, 2, 6, 8, 0], [5, 9, 7, 8, 3], [2, 9, 3, 1, 4] ] At = matriz_transposta(a) desenha_matriz(a, 0, 200) desenha_matriz(at, 200, 200) 36
Solução def matriz_transposta(a): '''Retorna a matriz transposta de A.''' m = len(a) n = len(a[0]) At = [] for i in range(n): linha = [] for j in range(m): linha.append(a[j][i]) At.append(linha) return At 37
Exercício Escreva uma função que recebe uma matriz A e um número x e retorna o produto de x por A (multiplicação de número por matriz). A = [ [3, 2, 6, 8, 0], [5, 9, 7, 8, 3], [2, 9, 3, 1, 4] ] B = produto(2, A) desenha_matriz(a, 0, 200) desenha_matriz(b, 200, 200) 38
Solução def produto(x, A): '''Retorna o produto entre um valor x e A.''' m = len(a) n = len(a[0]) xa = [] for i in range(m): linha = [] for j in range(n): linha.append(x*a[i][j]) xa.append(linha) return xa 39
Exercício Escreva uma função que recebe duas matrizes A e B e retorna a soma de A por B. A = [ [3, 2, 6, 8, 0], [5, 9, 7, 8, 3], [2, 9, 3, 1, 4] ] B = [ [1, 2, 2, 4, 5], [2, 0, 6, 3, 5], [3, 3, 1, 2, 0] ] C = soma_matrizes(a, B) desenha_matriz(a, -200, 200) desenha_matriz(b, 0, 200) desenha_matriz(c, 200, 200) 40
Solução def soma_matrizes(a, B): '''Retorna a soma entre as matrizes A e B.''' m = len(a) n = len(a[0]) C = [] for i in range(m): linha = [] for j in range(n): linha.append(a[i][j] + B[i][j]) C.append(linha) return C 41
Produto de matrizes 42
Produto de matrizes 43
Produto de matrizes def multiplica_matrizes(a, B): '''Multiplica duas matrizes.''' n = len(a) m = len(a[0]) p = len(b[0]) C = [] for i in range(n): linha = [] for j in range(p): s = 0 for k in range(m): s += A[i][k]*B[k][j] linha.append(s) C.append(linha) return C 44
Produto de matrizes A = [ [3, 1], [4, 2], [5, 3] ] B = [ [1, 2, 3, 0], [0, 1, 2, 1] ] C = multiplica_matrizes(a, B) desenha_matriz(a, -200, 200) desenha_matriz(b, 0, 200) desenha_matriz(c, 200, 200) 45
46
Cenas dos próximos capítulos 47
48
49