·

Cursos Gerais ·

Introdução à Lógica e Programação

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Texto de pré-visualização

Estruturas de controle repetição Introdução a programação de computadores 1 Introdução Alunao é importante que você entenda a necessidade das estruturas de controle de repetição para seu código Python e mesmo para outras linguagens de programação Algumas estruturas de programação existem desde linguagens conhecidas como BAIXO NÍVEL como C Assembly etc pois são essenciais para que o código tenha utilidade e para que fique compreensível para que o lê Esse é o caso dos laços O FOR e o WHILE são estruturas que variam muito pouco de linguagem para linguagem e na maioria das vezes mudase a forma mas não o funcionamento Se você já programou em outras linguagens aqui terá pouca novidade no entanto recomendamos que siga o passo a passo pois muitas vezes não sabemos de certas características quanto ao funcionamento do código Também a linguagem Python apesar de ser muito fácil é muito exigente e qualquer erro na sintaxe pode impedir o funcionamento de seu código 2 Estrutura de Repetição Vamos aprender agora uma técnica essencial de programação que pode ser conhecida como REPETIÇÃO LAÇO ou LOOP Laços loops são estruturas de repetição geralmente usados para processar coleções de dados tais como linhas de um arquivo ou registros de um banco de dados que precisam ser processados por um mesmo bloco de código BORGES Luiz Eduardo 2ª edição 2010 página 28 Vamos criar um código PYTHON que mostre uma sequência numérica de cinco elementos que sejam exibidos a partir de um número de entrada Podemos perceber que temos cinco prints portanto um código de ampla repetição Nesse caso apesar de repetitivo é fácil mas imaginemos um caso em que tenhamos necessidade de imprimir uma sequência de cem números Para facilitar e evitar que a repetição seja feita em linhas de código podemos utilizar uma estrutura de repetição Para completar esse conhecimento vamos ver um vídeo sobre estruturas de repetição loop Código para print de sequência 21 Uso dos comandos for in range while e break FOR Se você já entrou em contato com o FOR em outras linguagens vai ver algumas diferenças na utilização dele em PYTHON Por exemplo em C o FOR é usado para criar uma iteração e definir uma condição já parada Assim ocorre uma repetição do bloco for enquanto iteramos sobre sequência Durante a execução valor aponta para um elemento de sequência A cada iteração valor é atualizado para que o bloco de código processe o elemento correspondente Exemplo sequência 12345 total 0 for valor in sequência total valor printtotal OUT 15 No exemplo apresentado VALOR percorre a sequência portanto na primeira vez que o código passa pelo FOR ele vale 1 Na segunda vez vale 2 e assim por diante Vamos testar agora com outra sequência sequência 1 7 11J 2 None 3 33 4 5 total 0 for valor in sequência if isinstancevalorint and valor 0 total valor printtotal OUT 15 No exemplo mantivemos a sequência porém adicionamos aleatoriamente valores não inteiros na lista Dentro do FOR há uma avaliação dos valores que são INT antes de fazer a soma Portanto o resultado de saída é o mesmo do exemplo anterior O laço de repetição FOR possui a estrutura ELSE Os loops FOR são para iterar sobre uma coleção como uma lista ou tupla ou um iterador A sintaxe padrão para um loop FOR é for valor in sequência faça alguma coisa aqui com valor Wes McKinney 2ª edição 2017 página 47 A sentença da imagem repete bloco de código1 enquanto iteramos sobre O bloco de código2 é executado após o final do laço se ele não for interrompido com Exemplo seq1 1 4 7 None 55j 5 12 9 seq2 total 0 for var in seq1 if isinstancevarint seq2 seq2 var else total sumseq2 printSequência seq2 printTotal total OUT Sequência 1 4 7 5 12 9 Total 38 No exemplo o bloco de código do FOR é repetido durante toda a iteração da SEQ1 Então apenas quando ele é terminado bloco de código do ELSE é efetuado e apenas uma vez Parece sem sentido ter um bloco ELSE uma vez que tudo que há dentro desse bloco seria executado apenas uma vez mesmo se não estivesse dentro do ELSE No entanto existe um comando chamado BREAK o qual podemos usar no laço FOR e que termina a iteração antes do fim Nesse caso específico o que dentro do ELSE não seria executado Exemplo seq1 1 4 7 5 12 9 total 0 for var in seq1 total var if total 20 printExcedeu o limite break else printAbaixo do limite printTotal total OUT Excedeu o limite Total 29 Estrutura do FORELSE Podemos também percorrer a lista obtendo os valores dela e seus respectivos índices Todos os dados sequenciais em Python como Strings Listas e NDarray têm uma forma de referência a cada dado conhecida como indexação Se temos por exemplo uma Lista L com dados 5 15 8 podemos acessar cada um dos dados de L utilizando seus índices que em Python iniciam sempre com 0 Assim L0 5 L1 15 e L2 8 Podemos também acessar faixas de dados a partir de fatiamento de forma que o primeiro índice é incluído na fatia e o último não é incluído Então L02 5 15 Exemplo Seq 1 4 7 5 12 9 for indice valor in enumerateSeq print Seqd d indicevalor OUT Seq0 1 Seq1 4 Seq2 7 Seq3 5 Seq4 12 Seq5 9 Também é possível percorrer uma lista utilizando o comando de fatiamento SLICE Exemplo Seq 1 4 7 5 12 9 for x in Seq14 printx OUT 4 7 5 No exemplo o FOR percorre a sequência SEQ desde o índice 1 até o índice 4 durante a iteração Exemplo Seq 1 4 7 5 12 9 for x in Seq301 printx OUT 5 7 4 No exemplo apresentado temos a mesma ideia do anterior no entanto fizemos a sequência ao inverso já que o passo é 1 Perceba no entanto que o pedaço adquirido é sempre a primeira variável incluída e a segunda excluída Assim o item de índice 3 até o item de índice 1 já que o 0 é excluído Vamos agora testar um exemplo interessante Entraremos com uma lista de frutas de uma cesta Entraremos com uma lista de frutas que gostamos O programa retornará quais as frutas que estão na cesta e que não gostamos cesta maçã laranja pêra maçã laranja maçã uva mamão pêra frutasnaogosto frutasgosto maçã laranja for fruta in cesta if notfruta in frutasgosto and notfruta in frutasnaogosto frutasnaogostoappendfruta printfrutasnaogosto OUT pêra uva mamão Um outro comando serve para ajudar nas iterações FOR Esse comando se chama CONTINUE O CONTINUE tem por função passar para a próxima iteração ou seja volta ao começo do FOR Geralmente é utilizado dentro de uma condicional Exemplo lista 012345678910 for item in lista if item 4 continue printitem item OUT item 0 item 1 item 2 item 3 item 5 item 6 item 7 item 8 item 9 item 10 Repare que toda sequência foi impressa exceto o número 4 Exemplo cesta maçã laranja pêra maçã laranja maçã uva mamão pêra frutasnaogosto frutasgosto maçã laranja for fruta in cesta if anyfruta in frutasgosto fruta in frutasnaogosto continue frutasnaogostoappendfruta printfrutasnaogosto OUT pêra uva mamão No exemplo podemos reparar que o LOOP é interrompido e volta ao seu início sempre que a fruta que está em análise já foi incluída em alguma lista FRUTASGOSTO ou FRUTASNAOGOSTO Outro conceito aqui utilizado foi o ANY que testa todas as condições incluídas e retorna TRUE se qualquer uma delas for verdadeira RANGE A função RANGE retorna uma progressão aritmética de inteiros em uma lista Uma grande utilidade da função RANGE é construir a LISTA DE ITERAÇÃO da sentença FOR Formato geral rangeinício parada incremento o INÍCIO opcional é o primeiro valor a ser gerado na lista default 0 o PARADA a progressão termina no último valor antes de parada o INCREMENTO opcional é o incremento da progressão default 1 Exemplo sum inicio fim lista 0 1 5 for x in rangeinicio fim listaappendx sum x printlista printsum OUT 1 2 3 4 10 Podemos observar na saída do código que a lista gerada pelo RANGE vai até um número antes do número que chamamos de FIM Vamos mostrar aqui outros exemplos para que você alunao se acostume com a sintaxe de RANGE for x in range4 printx2 OUT 0 1 4 9 No exemplo utilizamos apenas um parâmetro para o RANGE e a partir daí usamos o default início 0 e o default passo 1 Um outro exemplo lista for x in range272 listaappendx printlista OUT 2 4 6 No exemplo apresentado utilizamos todos os três parâmetros de RANGE Então é gerada uma lista de 2 a 7exclusivo portanto é 6 com passo 2 Exemplo sum inicio fim lista 0 4 0 for x in rangeinicio fim 1 listaappendx sum x printlista printsum OUT 4 3 2 1 10 No exemplo podemos perceber que a função RANGE funciona como o SLICE A lista criada começa em 4 inclusive vai até 0 exclusive portanto vai até 1 e tem passo 1 portanto há decremento WHILE A sentença WHILE executa um conjunto de instruções várias vezes enquanto uma condição é atendida É utilizada quando precisamos fazer um teste a cada iteração do laço Estrutura do WHILE Exemplo contador 0 fim 10 while contador fim contador 1 printcontador OUT 1 2 3 4 5 6 7 8 9 10 Vamos fazer agora a sequência Fibonacci fim 15 a b 0 1 while b fim printb a b b ab OUT 1 1 2 3 5 8 13 Da mesma for que no IF e no FOR o WHILE pode ser utilizado com a sentença ELSE A sentença acima repete o BLOCO DE CÓDIGO1 enquanto CONDIÇÃO for verdadeira Quando for falsa executa BLOCO DE CÓDIGO2 Estrutura do WHILEELSE Exemplo valor 0 while valor 10 valor 1 else printValor valor OUT Valor 10 Assim como no FOR o WHILE pode ser usado com a função BREAK Podemos perceber que o WHILE faz apenas uma verificação no começo de cada repetição No entanto às vezes precisamos fazer alguma validação no decorrer do laço WHILE podendo precisar parar a repetição Para isso usamos a instrução BREAK que interrompe a execução do WHILE Exemplo from random import randint while True valor randint1010 printvalor if valor 0 break OUT 2 10 2 6 WHILE TRUE funciona como uma tautologia na qual a condicional é sempre verdadeira e para tal é necessário um break ou o interpretador nunca sairá do loop Tautologia Definição Chamase tautologia toda a proposição composta cuja última coluna da sua tabelaverdade encerra somente a letra Vverdade ALENCAR FILHO Edgard de Iniciação à lógica matemática São Paulo Nobel 2006 e edições anteriores página 43 Perceba na saída do código apresentado que assim que o código gera um inteiro negativo o BREAK é ativado É possível utilizar também a função CONTINUE que permite avançar para a próxima iteração do laço mais interno Exemplo i 0 while i 10 i 1 if i 2 0 continue printi OUT 1 3 5 7 9 O código imprime apenas os valores ímpares pois sempre que a divisão por 2 tiver resto 0 ou seja quando for par a instrução CONTINUE é ativada e o código então volta ao início da repetição sem passar pelo PRINT Em alguns casos por uma utilização incorreta do WHILE acabamos criando códigos que entram no Loop e nunca saem import random i randomrandint0100 while i 100 printi i i printfim OUT 14 28 56 Fim No caso ilustrado a função randintinício fimgera um número inteiro aleatório entre início e fim No entanto se o número gerado for 0 o código ficará preso no loop pois 00 0 portanto nunca sairemos no loop WHILE 3 Conclusão Este tópico procurou mostrar alguns exemplos básicos de como programar usando estruturas de controle de repetição os laços na linguagem Python e a importância de conhecêlas Buscamos aprender conceitos e regras sobre essas estruturas na linguagem Python e a partir desses conceitos vamos poder construir códigos ainda mais complexos e úteis Podemos até mesmo levar isso para outras linguagens de programação quando necessário Assim procuramos fundamentar as bases da compreensão de um tópico importante que será utilizado frequentemente daqui para frente em todas as linguagens de programação 4 Referências MCKINNEY Wes Python para análise de dados tratamento de dados com pandas Numpy e IPython São Paulo SP Novatec 2019 e edições anteriores BORGES Luiz Eduardo Python para Desenvolvedores 2ª ed Rio de Janeiro Edição do autor 2010 ALENCAR FILHO Edgard de Iniciação à lógica matemática São Paulo Nobel 2006 e edições anteriores