Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem de programação Programação Orientada a Objetos Python - Laços e Iterações Repetição de Instruções Programa: n = 5 while n > 0 : print n n = n – 1 print 'Fim!' print n n > 0 ? Laços (repetição de instruções) têm variáveis que a cada iteração do laço mudam seu valor. Muitas vezes uma sequência de números passam por essas variáveis de iteração.. Não print 'Fim' Sim n = 5 print n Saída: 5 4 3 2 1 Fim! 0 n = n -1 Um Laço Infinito n = 5 while n > 0 : print 'Ação’ print 'Reação' print 'Fim!' n > 0 ? Não print 'Fim!' Sim n = 5 print 'Ação' print 'Reação' O que está errado com esse laço? Outro Laço n = 0 while n > 0 : print 'Ação’ print 'Reação' print 'Fim!' n > 0 ? Não print 'Fim!' Sim n = 0 print 'Ação' print 'Reação' O que este laço faz? Saindo de um Laço de repetição • O comando break finaliza o laço atual e salta imediatamente para a primeira instrução após o laço de repetição. • Como um teste de repetição que pode ocorrer em qualquer parte dentro da estrutura do laço. > Olá Olá > terminou terminou > concluido Concluido! while True: linha = raw_input('> ') if linha == 'concluido' : break print linha print 'Concluido!' Saindo de um Laço de repetição • O comando break finaliza o laço atual e salta imediatamente para a primeira linha de instrução após o laço de repetição. • Como um teste de repetição que pode ocorrer em qualquer parte dentro da estrutura do laço. > Olá Olá > terminou terminou > concluído Concluído! while True: linha = raw_input('> ') if linha == 'concluído' : break print linha print 'Concluído!' True ? Não print 'Concluído' Sim .... ... break while True: linha = raw_input('> ') if linha == 'concluído' : break print linha print 'Concluído!' Finalizando uma iteração com continue O comando continue finaliza a iteração (repetição) atual e salta para o inicio do laço começando a próxima iteração. while True: linha = raw_input('> ') if linha[0] == '#' : continue if linha == 'concluído' : break print linha print 'Concluído!' > olá olá > # não imprima isto > imprima isto! imprima isto! > concluído Concluído! Finalizando uma iteração com continue O comando continue finaliza a iteração (repetição) atual e salta para o inicio do laço começando a próxima iteração. > olá olá > # não imprima isto > imprima isto! imprima isto! > concluído Concluído! while True: linha = raw_input('> ') if linha[0] == '#' : continue if linha == 'concluído' : break print linha print 'Concluído!' True ? Não print 'Concluído' Sim ... .... continue while True: linha = raw_input('> ') if linha[0] == '#' : continue if linha == 'concluído' : break print linha print 'Concluído!' Laço de Repetição Condicional • Um laço de repetição pode ser chamado de “Condicional” porque continuam rodando até que uma condição lógica torna-se False • Os laços que temos vistos até agora são bastante fáceis de examinar e perceber se eles são finitos ou são “laços infinitos”. • Algumas vezes é um pouco mais difícil ter certeza se o laço terá um fim. Laço de Repetição Incondicional • Frequentemente temos uma lista de itens alinhados em arquivo - que são na verdade um conjunto finito de coisas • Pode-se escrever um laço de repetição para rodar o laço uma vez para cada item do conjunto utilizando o comando for • Estes laços são chamados “laços de repetição incondicionais” porque eles executam por um determinado número de vezes • Dizemos que “laço de repetição itera sobre os membros de um conjunto” Laço de Repetição Incondicional Simples for i in [5, 4, 3, 2, 1] : print i print 'Lançar!' 5 4 3 2 1 Lançar! Um laço de Repetição Incondicional com Strings friends = ['Joseph', 'Glenn', 'Sally'] for friend in friends : print 'Feliz Ano Novo:', friend print 'Done!' Feliz Ano Novo: Joseph Feliz Ano Novo: Glenn Feliz Ano Novo: Sally Concluído! Laço de Repetição Incondicional Simples for i in [5, 4, 3, 2, 1] : print i print 'Lançar!' 5 4 3 2 1 Lançar! concluído ? Sim print 'Lançar!' print i Não Siga em frente Laço de repetição incondicional (for) tem variavéis de iteração explícitas que mudam cada iteração do laço. Estas variáveis de iteração percorrem a sequência ou conjunto. Olhando para In (dentro)... • A variável de iteração “repete” os sucessivos valores da sequência (conjunto ordenado) • O bloco (corpo) de código é executado uma vez para cada valor in (dentro) da sequência • A variável de iteração move por todos os valores in (dentro) da sequência for i in [5, 4, 3, 2, 1] : print i Variável de Iteração Sequência com cinco elementos Concluído ? Sim print i Não Siga em frente for i in [5, 4, 3, 2, 1] : print i • A variável de iteração “repete” os sucessivos valores da sequência (conjunto ordenado) • O bloco (corpo) de código é executado uma vez para cada valor in (dentro) da sequência • A variável de iteração move por todos os valores in (dentro) da sequência Concluído ? Sim print i Não Siga em frente print i i = 5 print i i = 4 print i i = 3 print i i = 2 print i i = 1 for i in [5, 4, 3, 2, 1] : print i Laços de Repetição Incondicional • Muitas vezes temos uma lista onde os itens são linhas em um arquivo - efetivamente um conjunto finito de coisas. • Podemos escrever um laço de repetição para rodar o laço uma vez para cada um dos itendentro do conjunto utilizando o construtor Python for • Estes laços são chamados “laços de repetição incondicional” porque eles executam em número exato de vezes. • Dizemos que “laços de repetição incondicional itera pelos membros de um conjunto” Idiomas dos Laços: O Que Fazemos em Laços Nota: Mesmo que estes exemplos sejam simples, o padrões se aplicam em todos os tipos de laços. Fazendo laços “inteligentes” O truque é “saber” alguma coisa sobre todo o laço de repetição quando você está emperrado escrevendo um código que somente vê uma entrada por vez Definir algumas variáveis para valores iniciais Procure por algo ou faça alguma coisa em cada entrada separadamente, atualize uma variável for objeto in dados: Dê uma olhada nas variáveis Iterando através de um Conjunto print 'Antes' for objeto in [9, 41, 12, 3, 74, 15] : print objeto print 'Depois' $ python basicloop.py Antes 9 41 12 3 74 15 Depois Qual é o Maior Número? 3 Qual é o Maior Número? maior_ate_agora -1 41 12 9 74 15 Encontrando o maior valor maior_ate_agora = -1 print 'Antes', maior_ate_agora for o_num in [9, 41, 12, 3, 74, 15] : if o_num > maior_ate_agora : maior_ate_agora = o_num print maior_ate_agora, o_num print 'Depois', maior_ate_agora $ python largest.py Antes -1 9 9 41 41 41 12 41 3 74 74 74 15 Depois 74 Fizemos uma variável que contêm o maior valor que vimos até agora. Se o número atual que estamos olhando é maior, ele será o novo maior valor que vimos até agora.. Contado em um Laço zork = 0 print 'Antes', zork for thing in [9, 41, 12, 3, 74, 15] : zork = zork + 1 print zork, thing print 'Depois', zork $ python countloop.py Antes 0 1 9 2 41 3 12 4 3 5 74 6 15 Depois 6 Para contar quantas vezes executamos o laço, introduzimos um contator como uma variável inicializada com 0 e adicionamos and we add um cada vezes que passa pelo laço. Somando em um Laço zork = 0 print 'Antes', zork for coisa in [9, 41, 12, 3, 74, 15] : zork = zork + coisa print zork, coisa print 'Depois', zork $ python countloop.py Antes 0 9 9 50 41 62 12 65 3 139 74 154 15 Depois 154 Para adicionar valores encontrados em um laço, acrescentamos uma a variável soma inicializada com zero e a cada passagem pelo laço adiciona o valor à soma . Valor médio em Laço conta = 0 soma = 0 print 'Antes', conta, valor for value in [9, 41, 12, 3, 74, 15] :conta = conta + 1 soma = soma + value print conta, soma, value print 'Depois', conta, soma, soma/conta $ python averageloop.py Antes 0 0 1 9 9 2 50 41 3 62 12 4 65 3 5 139 74 6 154 15 Depois 6 154 25 Uma média utiliza os padrões de contagem e soma e então os dividem depois de completado o Laço. Filtro em um Laço print 'Antes' for value in [9, 41, 12, 3, 74, 15] : if value > 20: print 'Número maior',value print 'Depois' $ python search1.py Antes Número maior 41 Número maior 74 Depois Usamos uma declaração if em um laço para capturar / filtrar o valor que estamos procurando. Busca usando variável Booleana found = False print 'Antes', found for value in [9, 41, 12, 3, 74, 15] : if value == 3 : found = True print found, value print 'Depois', found $ python search1.py Antes False False 9 False 41 False 12 True 3 True 74 True 15 Depois True Se somente queremos buscar e saber se um variável foi encontrada, usamos uma variável com valor inicial False e mudamos para True assim que encontramos o que estávamos procurando. Qual é o Menor Número? 9 Qual é o Menor Número? smallest_so_far -1 41 12 3 74 15 9 Qual é o Menor Número? None 41 12 3 74 15 smallest_so_far smallest = None print 'Antes' for value in [9, 41, 12, 3, 74, 15] : if smallest is None : smallest = value elif value < smallest : smallest = value print smallest, value print 'Depois', smallest $ python smallest.py Antes 9 9 9 41 9 12 3 3 3 74 3 15 Depois 3 Sempre temos uma variável que é a menor até o momento. A primeira passagem pelo Laço smallest é None, então smallest recebe o primeiro valor que pegamos. Encontrando o menor valor Os Operadores “is” e “is not” • Python tem um operador is que pode ser utilizado em expressões lógicas • Significa “é o mesmo que” • Similar, mas mais forte que == • is not também é um operador lógico. smallest = None print 'Antes' for value in [3, 41, 12, 9, 74, 15] : if smallest is None : smallest = value elif value < smallest : smallest = value print smallest, value print 'Depois', smallest • Laço While (indefinido) • Laço infinito • Usando break • Usando continue • Laço For (definido) • Variável de iteração • Idioma dos Laços • Maior ou menor Summary Acknowledgements / Contributions These slides are Copyright 2010- Charles R. Severance (www.dr-chuck.com) of the University of Michigan School of Information and open.umich.edu and made available under a Creative Commons Attribution 4.0 License. Please maintain this last slide in all copies of the document to comply with the attribution requirements of the license. If you make a change, feel free to add your name and organization to the list of contributors on this page as you republish the materials. Initial Development: Charles Severance, University of Michigan School of Information ...Estes slides estão protegidos por direitos autorais ( Copyright 2010)- Charles R. Severance (www.dr-chuck.com) da Escola de Informação da Universidade de Michigan e open.umich.edu e disponibilizado sob uma licença Creative Commons Attribution 4.0 . Por favor mantenha este último slide em todas as cópias do documento em conformidade com os requisitos de atribuíção da licença. Se você efetuou uma alteração, sinta-se livre para adicionar seu nome e organização na lista de contribuidores nesta página ao republicar o material. Desenvolvimento inicial: Charles Severance, University of Michigan School of Information Tradução para Português (Brazil) - Valquiria Fenelon Pereira http://www.dr-chuck.com http://open.umich.edu/ http://www.dr-chuck.com http://open.umich.edu/
Compartilhar