Modulo 010 – While e Criando um Loop infinito

 – While e Criando um Loop infinito – Estrutura While

Neste módulo vamos falar do WHILE. Ele, assim como o FOR, também é uma estrutura de repetição. A diferença é que o WHILE será executado ENQUANTO algo for verdade. Ou seja, não é definido o tamanho previamente Por exemplo, “Executar enquanto i<5” ou “Executar enquanto venda <10000”.

 while condição: 
     Ação que deverá ser feita 
                               
 Só será executado quando a condição não for mais atendida 

Vamos considerar uma lista de compras. Usaremos o WHILE para inserir produtos na lista até um dado momento onde não há mais produtos a serem inseridos. Ou seja, podemos colocar 1 produto na lista ou 200. O programa só será interrompido quando ordenarmos para que isso seja feito.

 venda = input('Registre um produto. Para cancelar o registro de um novo produto, basta   apertar enter com a caixa vazia'
 vendas = [] 
 #crie aqui o programa 
                  
 while venda != ''
     vendas.append(venda) 
     venda = input('Registre um produto. Para cancelar o registro de um novo produto, basta apertar enter com a caixa vazia'
               
                   
 print('Registro Finalizado. As vendas cadastradas foram: {}'.format(vendas)) 
______________________________

Podemos inserir produtos eternamente nesta lista. Enquanto a condição != de ‘ ‘ for TRUE(VERDADE) sempre aparecerá um inputbox para que o usuário possa inserir o próximo produto. Vamos ver no próximo slide o que acontece quando o usuário preenche ‘ ‘(VAZIO) na caixa de entrada.

 venda = input('Registre um produto. Para cancelar o registro de um novo produto, basta   apertar enter com a caixa vazia'
 vendas = [] 
 #crie aqui o programa 
                  
 while venda != ''
     vendas.append(venda) 
     venda = input('Registre um produto. Para cancelar o registro de um novo produto, basta apertar enter com a caixa vazia'
               
                   
 print('Registro Finalizado. As vendas cadastradas foram: {}'.format(vendas)) 
______________________________
 Registre um produto. Para cancelar o registro de um novo produto, basta apertar enter com a caixa vaziaarroz 
 Registre um produto. Para cancelar o registro de um novo produto, basta apertar enter com a caixa vaziafeijao 
 Registre um produto. Para cancelar o registro de um novo produto, basta apertar enter com a caixa vaziamacarrao 
 Registre um produto. Para cancelar o registro de um novo produto, basta apertar enter com a caixa vaziavagem 
 Registre um produto. Para cancelar o registro de um novo produto, basta apertar enter com a caixa vaziacenoura 
 Registre um produto. Para cancelar o registro de um novo produto, basta apertar enter com a caixa vazia 
 Registro Finalizado. As vendas cadastradas foram: ['arroz', 'feijao', 'macarrao', 'vagem', 'cenoura', 'frango'] 

Perceba que ao usarmos ‘ ‘ na caixa de entrada, recebemos a informação ‘Registro Finalizado’, assim como a lista de itens inseridos anteriormente.

– Loop infinito no While

Se você se lembra bem, falamos que o While rodará eternamente até a condição ser atendida. E se ela não for? O que acontece? Entramos no que chamamos de LOOP INFINITO. Qual o problema deste loop? Como ele rodará eternamente, 2 cenários são possíveis:
1) Seu PC irá travar;
2) Seu código não chegará ao fim e você não poderá continuar seu trabalho. Vamos entender primeiro o que é e depois como resolver. Vamos para o exemplo.

 vendas = [941, 852, 783, 714, 697, 686, 685, 670631, 453, 386, 371, 294, 269, 259, 218, 208, 163, 125, 102, 87, 47, 7
 vendedores = ['Maria', 'José', 'Antônio', 'João', 'Francisco', 'Ana', 'Luiz', 'Paulo', 'Carlos', 'Manoel', 'Pedro', 'Francisca', 'Marcos', 'Raimundo', 'Sebastião', 'Antônia', 'Marcelo', 'Jorge', 'Márcia', 'Geraldo', 'Adriana', 'Sandra', 'Luis'
 meta = 50 
 i = 0 
     
 while vendas[i] > meta: 
     print('{} bateu a meta. Vendas: {}'.format(vendedores[i], vendas[i])) 

Olhando a condição do while temos que nosso loop será pausado quando a venda for < que a meta. Ok! Parece razoável... No entanto, quando olhamos o código dentro da indentação não temos nada que aumente o valor de i. Logo, i sempre será 0 (ZERO)! Isso fará com que vendas sempre seja 941 e consequentemente sempre maior que a meta que é 50. Estamos em um LOOP INFINITO...

Veja ao lado o que acontece ao rodar o programa. Perceba que temos uma repetição da linha “Maria bateu a meta. Vendas:941”. Outro ponto é que temos o asterisco ao lado da célula sinalizando que o Jupyter continua a processar a informação.

 while vendas[i] > meta: 
     print('{} bateu a meta. Vendas: {}'.format(vendedores[i], vendas[i])) 
______________________
 Maria bateu a meta. Vendas: 941 
 Maria bateu a meta. Vendas: 941 
 Maria bateu a meta. Vendas: 941 
 Maria bateu a meta. Vendas: 941 
 Maria bateu a meta. Vendas: 941 
 ... 

Como Solucionar? Quando entramos em um Looping Infinito não devemos nos desesperar. Isso irá acontecer mais vezes do que você gostaria infelizmente ☺ Faz parte.
Existem 2 formas para resolver o problema:
1) Pausar (BOTÃO DE STOP) o Jupyter Notebook e corrigir o erro.
2) Pausar o Jupyter via Prompt de comando.
No Prompt de comando use CTRL + C e retorne para seu navegador

Nenhum comentário:

Postar um comentário