A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Iterações Dilvan Moreira. Lembrando... Desenvolvimento de programas  Desenvolvimento incremental:  Evitar depuração de muito código.  A técnica consiste.

Apresentações semelhantes


Apresentação em tema: "Iterações Dilvan Moreira. Lembrando... Desenvolvimento de programas  Desenvolvimento incremental:  Evitar depuração de muito código.  A técnica consiste."— Transcrição da apresentação:

1 Iterações Dilvan Moreira

2 Lembrando... Desenvolvimento de programas  Desenvolvimento incremental:  Evitar depuração de muito código.  A técnica consiste em teste de somente uma pequena quantidade código.

3 Lembrando... Desenvolvimento incremental  Recomendações para iniciantes :  Comece com um programa que funciona e faça pequenas mudanças incrementais.  Em qualquer ponto do processo, se houver um erro, você saberá exatamente onde ele está.  Use variáveis temporárias para manter valores intermediários Podendo exibi-los e checá-los.

4 Lembrando... Composição  É possível chamar uma função dentro de outra  As funções distance e area já foram definidas  E outras funções podem chama-lás def circle_area(xc, yc, xp, yp): radius = distance(xc, yc, xp, yp) result = area(radius) return result

5 Lembrando... Funções booleanas  Funções podem retornar valores booleanos  E servem muitas vezes para ocultar teste complicados. def is_divisible(x, y): if x % y == 0: return True else: return False

6 Objetivos  Entender como utilizar Iterações: for e while.  Leitura:  do livro “Think Python” Cap. 7

7 Reatribuições  É permitido fazer mais de uma atribuição à mesma variável.  Uma nova atribuição faz uma variável existente referir-se a um novo valor. bruce = 5 print bruce, bruce = 7 print bruce  Saída ???

8 Reatribuições  Saída: 5 7  Porque no 1º print o valor era 5 e na 2ª vez o valor é 7.  O valor 5 no 2º print não existe mais.  Diagrama de reatribuição:

9 Reatribuições - Atenção  Existe a tendência de lermos o comando a = b como um comando de igualdade.  Igualdade é comutativa e atribuição não é.  Em matemática:  Se a = 7 então 7 = a.  Em Python  a = 7 # Permitido  7 = a # Não permitido

10 Reatribuições - Atenção  Uma expressão de igualdade a = b, na matemática, é sempre verdadeira.  Em Python, um comando de atribuição pode tornar duas variáveis iguais, mas elas não tem que permanecer assim. a = 5 b = a # a and b are now equal a = 3 # a and b are no longer equal

11 Reatribuições - Atenção  Reatribuição é útil, mas:  Você deve usar com cautela.  Se o valor das variáveis muda frequentemente, isto pode tornar o código difícil de ser lido e depurado.

12 Reatribuições  A instrução funcionará? x = x+1  Significa: “ x é a soma do valor atual de x + 1 ”  Não, pois x não foi inicializado.  O Python antes de criar a variável e atribuir o novo valor avalia o lado direito. >>> x = x+1 NameError: name 'x' is not defined

13 Reatribuições  E agora funcionará? >>> x = 0 >>> x = x+1  Sim, pois x foi inicializado.

14 Loop

15 Loop - (comando while )  Repetir tarefas idênticas ou similares sem cometer erros.  Vimos a função contagemRegressiva usando recursividade, que usava recursividade para fazer a repetição.  Podemos usar iteração.

16 Loop - (comando while ) def contagemRegressiva(n): while n > 0: #Enquanto (n >0) print n n = n-1 print "Fogo!“ contagemRegressiva(4)  Saída???

17 Loop - (comando while )  Fluxo de execução:  Teste a condição, resultando 0 ou 1.  Se a condição for falsa (0), saia do comando while e continue a execução a partir do próximo comando.  Se a condição for verdadeira (1), execute cada um dos comandos dentro do corpo e volte ao passo 1

18 Loop - (comando while )  Saída: 4 3 2 1 Fogo!

19 Loop - (comando while )  No caso de contagemRegressiva, podemos provar que o loop terminará porque sabemos que o valor de n é finito.  Cuidado com loops infinitos. n = 1 while n > 0: #valor de n não muda print n-1

20 Loop - (comando for )  Automatizar tarefas repetitivas.  Sintaxe: for item in lista_itens:  Sintaxe:  item : é uma variável que a cada iteração do for será atribuído um novo valor da lista.  lista_itens : a lista a ser percorrida em ordem.

21 Loop - (comando for )  Formas de criar uma lista de valores:  1ª String: jkp = ["pedra", "papel", "tesoura"]  2ª Inteiros: seq = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

22 Loop - (comando for )  Formas de criar uma lista de valores:  3ª Comando range : seq = range(1,4)  Igual: seq = [1, 2, 3]

23 Loop - (comando for )  Comando range : >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> range(5,10) [5, 6, 7, 8, 9] >>> range(-5,10) [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

24 Loop - (comando for )  Comando range : >>> range(-6,6,2) [-6, -4, -2, 0, 2, 4] >>> range(100, 20) [] >>> range(100, 20, -10) [100, 90, 80, 70, 60, 50, 40, 30]

25 Loop - (comando for )  É possível percorrer uma lista de itens. jan_ken_pon = ["pedra", "papel", “tesoura"] for item in jan_ken_pon: print item  Saída: pedra papel tesoura

26 Loop - (comando for )  É possível percorrer uma lista de itens gerada. lista = range(1,4) for item in lista: for item in range(1,4): print item  Saída: 1 2 3

27 Comando break  As vezes não se tem uma condição que determine que é o fim do loop.  E é só sabido quando esta no meio do corpo do loop.  Por exemplo, que o programa espere até o usuário informar uma entrada apropriada:

28 Comando break while True: line = raw_input('> ') if line == 'done': break print line print 'Done!'

29 Comando break  A condição do loop é true, e sempre será true.  Até que encontre um break que saia do loop.  Serve para o for e o while.  É possível verificar o estado de parada a qualquer momento.

30 Loop  O comando else pode ser usado pelo if, while e for. valores = [2, 4, 5, 2, -1] for i in valores: if i < 0: print "Negativo encontrado: %d" % i break else: print "Nenhum negativo encontrado"

31 Loop  Esqueça o uso de else para while e for.  Use somente com o if. valores = [2, 4, 5, 2, -1] for i in valores: if i < 0: print "Negativo encontrado: %d" % i break else: print "Nenhum negativo encontrado"

32 Método de Newton  Loops são freqüentemente utilizados, exemplo é o calculo da raiz quadrada pelo método de Newton:  Você pode começar com qualquer estimativa para o valor de x podendo calcular a melhor alternativa com esta formula

33 Método de Newton  Por exemplo, se a é 4 e x é 3: >>> a = 4.0 >>> x = 3.0 >>> y = (x + a/x) / 2 >>> print y 2.16666666667

34 Método de Newton  Agora você esta mais próximo da resposta, associamos o valor achado de y para nosso valor de x, então teremos: >>> x = y >>> y = (x + a/x) / 2 >>> print y 2.00641025641

35 Método de Newton  Depois de algumas execuções: >>> x = y >>> y = (x + a/x) / 2 >>> print y 2.00001024003 >>> x = y >>> y = (x + a/x) / 2 >>> print y 2.00000000003

36 Método de Newton  Em geral não saberemos quantas interações poderemos ter para resolver, mas sabemos qual será a condição para pararmos, y == x while True: print x y = (x + a/x) / 2 if y == x: break x = y

37 Método de Newton Atenção: Para a maioria dos valores esta função funciona bem, porém para comparação de valores em float torna-se perigoso!  Ponto Flutuante são valores aproximadamente certos, porém alguns números racionais, como 1/3, e números irracionais, como √2, não podem ser representados com exatidão prevista no tipo float.

38 Método de Newton  Ao invés de usar x == y, é mais seguro utilizar uma função abs, que calcula o numero absoluto, ou magnitude da diferença entre eles if abs(y-x) < epsilon: break  Onde epsilon é um valor como 0.0000001 que determina quão é perto suficientemente.

39 Exercício:  Encapsular este loop anterior em uma função chamada square_root(), que leva como parâmetro, escolhe um valor razoável de x e retorna uma estimativa da raiz quadrada.

40 Algoritmos  O método de Newtow é um bom exemplo de algoritmo.  Aprender a tabuada, através da memorização de resultados não é um algoritmo.

41 Algoritmos  Truques  produto dos 9:  Você escreve n-1 como o primeiro numero,  e 10 – n como segundo digito,  Isso é um algoritmo!  As técnicas que você aprendeu para somar com transporte, subtração com empréstimo, e divisão longa são todas algoritmos.

42 Algoritmos  Eles não requerem nenhuma inteligência para serem executados.  É preocupante que humanos gastem tanto tempo na escola aprendendo a executar algoritmos que, literalmente, não requerem inteligência!  O processo de projetar algoritmos  interessante  intelectualmente desafiante  parte central da programação

43 Depuração (Debugging)  Programas maiores te levam a gastar mais tempo na depuração.  É provado que quanto maior o código:  Maior as chances de cometer erros!  Erros se escondem melhor no código!!

44 Depuração por Bissecção  Uma boa pratica é a “depuração por bissecção”:  Se código tiver 100 linhas, procure no meio do código: Então imprima variáveis ou qualquer coisa que possa te ajudar a checar.  Se estar correto os valores Então o problema esta abaixo do código, Divida novamente a segunda parte, Ou repita isso até encontrá-lo.

45 Perguntas?


Carregar ppt "Iterações Dilvan Moreira. Lembrando... Desenvolvimento de programas  Desenvolvimento incremental:  Evitar depuração de muito código.  A técnica consiste."

Apresentações semelhantes


Anúncios Google