Iteração em Python (Laços) Jurandy Soares Data: 28 de Abril de 2010s © Jurandy Soares, 2010 -- http://bit.ly/jurandy Fluxo de Controle: Laços • Lembre-se que a ordem em que os comandos de um programa são executados é chamado de fluxo de programa • Até então temos visto execução sequencial (comandos executados um após o outro na ordem em que aparecem no programa) e comando de controle de seleção (comandos são executados condicionalmente) © Jurandy Soares, 2010 -- http://bit.ly/jurandy Fluxo de Controle: Laços (cont.) Considere a seguinte tarefa: * Você deseja entrar com um valor inteiro não nulo e quer assegurar que o programa não continuará até que o usuário tenha entrado com um valor apropriado. * Você entrou com uma sequencia de valores de comprimento arbitrário e deseja contar o número de valores e computar a média Pergunta: Como podemos escrever um código para executar uma dessas tarefas que envolvem repetição? © Jurandy Soares, 2010 -- http://bit.ly/jurandy Comandos de Iteração (Laços) Em muitas tarefas de programação desejamos que um bloco de comandos seja executado repetidamente até que determinada condição seja satisfeita. Exemplo: escreva('Entre com um inteiro não nulo: ') inteiroNaoNulo = inteiro(entrada()) enquanto inteiroNaoNulo == 0: escreva('Erro: um inteiro não nulo era esperado.') escreva('Entre com um inteiro não nulo: ') inteiroNaoNulo = inteiro(entrada()) © Jurandy Soares, 2010 -- http://bit.ly/jurandy Comandos de Iteração (Laços) (cont.) Exemplo anterior passado para Python 3.x: print('Entre com um inteiro não nulo: ') inteiroNaoNulo = int(input()) while inteiroNaoNulo == 0: print('Erro: um inteiro não nulo era esperado.') inteiroNaoNulo = int(input('Entre com um inteiro não nulo: ')) © Jurandy Soares, 2010 -- http://bit.ly/jurandy Comando de Iteração: Enquanto..faça O comando de iteração "enquanto" (while em Inglês) é uma instrução de repetição, onde a expressão lógica é testada antes de o bloco de instruções subjacente. © Jurandy Soares, 2010 -- http://bit.ly/jurandy Formato Padrão do "Enquanto..Faça" A estrutura básica do comando "enquanto" (while) envolve quatro etapas: 1. inicialização de uma variável de controle 2. teste de interrupção envolvendo a variável de controle 3. execução do bloco de comandos 4. atualização da variável de controle inicialização while teste: bloco_while atualização © Jurandy Soares, 2010 -- http://bit.ly/jurandy Um Exemplo de Laço Problema: Escreva um trecho de código que leia uma sequencia de inteiros até que o valor zero seja encontrado e que calcule e exiba a soma dos números lidos. © Jurandy Soares, 2010 -- http://bit.ly/jurandy Sua Vez Problema: Escreva um programa que leia uma sequencia de inteiros até que o valor zero seja encontrado e conte e exiba a quantidade de números pares e de números ímpares lidos, sem contar com o 0. © Jurandy Soares, 2010 -- http://bit.ly/jurandy Conta Pares e Ímpares © Jurandy Soares, 2010 -- http://bit.ly/jurandy Sua Vez, Novamente Problema: Idéia: Escreva um programa que, dadas duas variáveis inteiras, largura e altura, exiba um retângulo de '+' da largura e altura. Inicie resolvendo um problema simples: dada uma variável inteira largura, exiba uma largura de '+' em uma linha. © Jurandy Soares, 2010 -- http://bit.ly/jurandy Exiba uma Linha de '+'s Código para exibir uma linha de largura preenchida com '+': # # # # # ... ... ... ... ... Idéia: Como iremos exibir altura de linhas de largura de colunas de '+'s? Em outras palavras, como repetimos o código acima altura vezes? © Jurandy Soares, 2010 -- http://bit.ly/jurandy Formato padrão do "Para...em" Interprete o "para...em" como "para cada...em" para nomeVar em Sequencia: bloco_para for letra in 'Seu Nome Completo': print(letra) © Jurandy Soares, 2010 -- http://bit.ly/jurandy Exemplo com Cadeia de Caracteres espacos = '' for letra in 'Instituto': print(espacos, letra, sep='') espacos += ' ' Saída: I n s t i t u © Jurandy Soares, 2010 -- http://bit.ly/jurandy t o © Jurandy Soares, 2010 -- http://bit.ly/jurandy Exemplo Numérico for n in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]: print(n, end=' ') print() Saída: 0 1 2 3 4 5 6 7 8 9 © Jurandy Soares, 2010 -- http://bit.ly/jurandy Exemplo Numérico (cont.) soma = 0 for n in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]: soma += n print (soma) Saída: 45 © Jurandy Soares, 2010 -- http://bit.ly/jurandy Intervalo • Na álgebra: [início, fim[ Inclui início, mas não fim • Em Python: range([ini], fim, [passo]) Onde: • ini é o valor inicial do intervalo • fim é o valor final do intervalo, não incluso Observação: • passo é a diferença entre os valores consecutivos do intervalo os colchetes ("[]") indicam que o argumento é opicional © Jurandy Soares, 2010 -- http://bit.ly/jurandy Exemplos de Intervalo em Python >>> list(range(0, 13)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] >>> list(range(13)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] >>> list(range(2,15)) # [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] >>> list(range(3,100,3)) # [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99] >>> list(range(20,0,-3)) # [20, 17, 14, 11, 8, 5, 2] passo implícito ini e passo implícitos passo implícito ini, fim e passo explicitados fim > ini e passo < 0 © Jurandy Soares, 2010 -- http://bit.ly/jurandy Exemplo Numérico de Para com Intervalo for n in range(1,101): print(n) © Jurandy Soares, 2010 -- http://bit.ly/jurandy Exemplo Numérico de Para com Intervalo (cont.) soma = 0 for n in range(1,101): soma += n print(soma) © Jurandy Soares, 2010 -- http://bit.ly/jurandy