Computação 1 Aula 8 Teórica professor: Leonardo Carvalho
Mais exercícios com for 2
Exercício Escreva uma função que recebe um inteiro n e retorna o somatório: 3
Solução import math def somatorio(n): '''Calcula a soma 1/x! para x de 0 a n.''' s = 0 for x in range(n+1): s += 1.0/math.factorial(x) return s 4
Testando >>> somatorio(1) 2.0 >>> somatorio(2) 2.5 >>> somatorio(5) 2.7166666666666663 >>> somatorio(10) 2.7182818011463845 >>> somatorio(15) 2.718281828458995 >>> somatorio(20) 2.7182818284590455 >>> somatorio(25) 2.7182818284590455 5
Exercício Escreva uma função que recebe uma sequência L e retorna a quantidade de valores pares em L Exemplo: >>> quantos_pares([3, 1, 2, 20, 5, 8, 10, 4, 7, 9, 8, 10]) 7 >>> quantos_pares([1, 3, 9, 7]) 0 >>> quantos_pares([8, 8, 8, 8, 8]) 5 6
Solução def quantos_pares(l): '''Retorna a quantidade de numeros pares em L.''' n = 0 for x in L: if x%2==0: n += 1 return n 7
Exercício Escreva uma função que recebe um valor x e uma sequência a e retorna o valor do polinômio: a[0] + a[1]*x + a[2]*x**2 +... + a[n-1]*x**(n-1) onde n é o tamanho da sequência a 8
Solução def polinomio(x, a): '''Calcula o polinomio a[0] + a[1]*x + a[2]*x**2 +... + a[n-1]*x**(n-1)''' s = 0 for i in range(len(a)): s += a[i]*x**i return s 9
Testando >>> a = 1, 2, 3 >>> polinomio(0, a) 1 >>> polinomio(1, a) 6 >>> polinomio(2, a) 17 >>> b = 5, -2, -1, 0, 3 >>> polinomio(3, b) 233 >>> polinomio(1.2, b) 7.3808 10
Função max Sabemos que a função max pode ser usada para obter o maior elemento de uma sequência: >>> max([29, 81, 74, 71, 7, 9, 1, 20, 40]) 81 >>> max([29, -81, 74, 71, -7, 9, -1, -20, 40]) 74 >>> max(range(100)) 99 Mas como a função max funciona? 11
Exercício Escreva uma função que recebe uma sequência L e retorna o maior elemento de L sem usar a função max!!! 12
Solução def maximo(l): '''Retorna o maior elemento de L.''' m = L[0] for x in L: if x > m: m = x return m 13
14
Exercício O que faz este código? import turtle import random turtle.speed('fastest') angulo = random.randint(-30, 30) distancia = random.randint(0, 10) turtle.left(angulo) turtle.forward(distancia) turtle.done() 15
Exercício Como fazer a tartaruga dar 100 passos aleatórios? 16
Exercício import turtle import random turtle.speed('fastest') for i in range(100): angulo = random.randint(-30, 30) distancia = random.randint(0, 10) turtle.left(angulo) turtle.forward(distancia) turtle.done() 17
Exercício Como calcular a distância percorrida pela tartaruga? 18
Exercício... distancia_total = 0 for i in range(100): angulo = random.randint(-30, 30) distancia = random.randint(0, 10) turtle.left(angulo) turtle.forward(distancia) distancia_total += distancia turtle.write(distancia_total)... 19
Exercício Como fazer a tartaruga andar até que a distância total seja maior do que 100? 20
Exercício Quantos passos serão necessários? 10? 100? 1000? 1000000? Não sabemos! 21
precisamos de outra estrutura de repetição 22
while condicao: comandos 23
Exemplo... distancia_total = 0 while distancia_total < 100: angulo = random.randint(-30, 30) distancia = random.randint(0, 10) turtle.left(angulo) turtle.forward(distancia) distancia_total += distancia turtle.write(distancia_total)... 24
Exemplo i = 0 while i < 10: turtle.write(i) turtle.forward(20) i += 1 25
Exemplo Neste caso podemos trocar while pelo for i = 0 for i in range(10): turtle.write(i) turtle.forward(20) i + = 1 26
Todo for pode ser feito com while... 27
Exemplo Reescreva o código abaixo usando while no lugar de for for p in L: turtle.goto(p) turtle.dot(20) 28
Solução i = 0 while i < len(l): turtle.goto(l[i]) turtle.dot(20) i += 1 29
Mas nem todo while pode ser feito com for! 30
Exemplo i = 0 while i%2==0: turtle.write(i) turtle.forward(20) i = random.randint(0, 10) 31
Loops infinitos E se a condição sempre for verdadeira? def zueira(): i = 0 while i<10: i = 1 32
Loops infinitos Podemos simplificar: def nada_pra_sempre(): '''Funcao que nao faz nada para sempre.''' while True: pass 33
Exemplo Fazer a tartaruga caminhar aleatoriamente para sempre... while True: angulo = random.randint(-30, 30) distancia = random.randint(0, 10) turtle.left(angulo) turtle.forward(distancia)... 34
Dever de casa Como evitar que a tartaruga saia da tela? Faça ela dar voltas na tela! 35
ULTRA MEGA ULTIMATE FIGHT VERMELHO VS AZUL 36
Simulação Vamos simular uma batalha entre uma bola vermelha e uma bola azul! Regras: cada bola começa com raio 100 em cada rodada é sorteado um número entre 0 e 20 para cada bola a bola que tiver o menor número perde a rodada, diminuindo de tamanho (o raio é reduzido pela diferença entre os valores sorteados) o jogo acaba quando o raio de uma das bolas chegar a zero ou menos 37
Inicialização import turtle import random import time turtle.speed('fastest') turtle.tracer(0) turtle.up() turtle.hideturtle() raio_azul = 100 raio_vermelho = 100 38
loop... while raio_azul > 0 and raio_vermelho > 0:... 39
Desenhando as bolinhas... while raio_azul > 0 and raio_vermelho > 0: turtle.clear() # limpa a tela turtle.goto(-200, 0) turtle.color('blue') turtle.dot(2*raio_azul) turtle.goto(200, 0) turtle.color('red') turtle.dot(2*raio_vermelho) turtle.update() time.sleep(1) # espera 1 segundo antes de prosseguir 40
Sorteio dos valores... while raio_azul > 0 and raio_vermelho > 0:... valor_azul = random.randint(0, 20) valor_vermelho = random.randint(0, 20) turtle.goto(-200, 200) turtle.color('blue') turtle.write(valor_azul, font=('arial', 20, 'normal')) turtle.goto(200, 200) turtle.color('red') turtle.write(valor_vermelho, font=('arial', 20, 'normal')) 41
Redução de raio... while raio_azul > 0 and raio_vermelho > 0:... if valor_azul > valor_vermelho: raio_vermelho -= valor_azul - valor_vermelho else: raio_azul -= valor_vermelho - valor_azul turtle.update() time.sleep(1) 42
Fim do jogo... while raio_azul > 0 and raio_vermelho > 0:......... turtle.clear() if valor_azul > valor_vermelho: turtle.goto(-200, 0) turtle.color('blue') turtle.dot(2*raio_azul) turtle.goto(0, 0) turtle.write('azul ganhou!') else:... 43
Fim do jogo... else: turtle.goto(200, 0) turtle.color('red') turtle.dot(2*raio_vermelho) turtle.goto(0, 0) turtle.write('vermelho ganhou!') turtle.update() turtle.done() 44
Trabalho 45
Grupos Individual, em dupla, ou em trio Prazo de entrega: 1 de março Objetivo: criar um programa em Python mais complexo do que os que fizemos em aula O programa deve ter: funções, if, for e while 46
Sugestões Jogo da Velha Sudoku Labirinto Batalha naval Jogo da memória Perguntas e respostas (como Jogo do Milhão) Preencha os espaços em branco (como em testes de idiomas) 47
Não recomendado! Evite programas com muita dinâmica! Super Mario Candy Crush Corrida Luta 48
49