Laços While
Laços while
são a principal ferramenta para lidar com iteração indefinida, sendo úteis em cenários onde o número de iterações não é conhecido previamente, como monitorar níveis de estoque até que atinjam um determinado limite.
Veja como Alex demonstra o uso de laços while
para lidar com situações dinâmicas:
Um laço while
em Python executa continuamente um bloco de código enquanto uma condição especificada permanecer True
.
Sintaxe
Para iniciar um laço while
, define-se uma variável de controle e, em seguida, utiliza-se a palavra-chave while
acompanhada de uma condição booleana. A condição é seguida por dois pontos :
, que indicam o início do bloco de código do laço.
O laço será executado repetidamente até que a condição se torne False
. Normalmente, a variável de controle é atualizada dentro do laço para eventualmente tornar a condição False
e encerrar o laço.
Considere este exemplo de laço while
:
# Handling a queue at a grocery store checkout queue_length = 5 # Initial number of people in the queue while queue_length > 0: # Start the `while` loop as long as the queue isn't empty print(f"Current queue size: {queue_length}") # Simulate serving a customer print("Serving the next customer...") # Decrease the queue length by 1 as a customer leaves # The `-=` operator is a shortcut for `queue_length = queue_length - 1` queue_length -= 1
Neste exemplo, queue_length
atua como nossa variável de controle, começando em 5
. A cada iteração do loop, o valor de queue_length
diminui em 1
até atingir 0
. Nesse ponto, o loop termina porque a condição 0 > 0
é avaliada como False
.
Observação
É fundamental atualizar a variável de controle dentro do loop para eventualmente atingir a condição de parada do loop. Sem isso, o loop será executado ininterruptamente, impedindo a execução de qualquer código subsequente.
Aplicação de Exemplo
Imagine gerenciar o estoque de leite em um supermercado. É necessário garantir que o estoque não fique abaixo de um determinado nível e, quando isso acontecer, deve-se reabastecer para manter o nível adequado.
Um loop while
é útil nessa situação porque permite reabastecer o leite em incrementos ao longo de várias iterações até que o estoque atinja o nível desejado. Sem um loop while
, seria necessário calcular a quantidade exata de leite a ser reabastecida de uma só vez.
Por exemplo, considere que um funcionário da loja só pode reabastecer uma quantidade fixa de leite por viagem (por exemplo, 20
caixas por reabastecimento). Se o estoque não for totalmente reabastecido, o funcionário retorna ao depósito para trazer outro lote de leite.
# Initial amount of milk in stock milk_stock = 15 # Minimum stock level before restocking is necessary min_stock = 50 # Quantity a worker can restock at one time restock_quantity = 20 # Start the loop to restock milk until the stock exceeds the minimum required level while milk_stock < min_stock: # If the loop is running, the condition is `True`, indicating we need more milk print(f"Milk stock is low: {milk_stock} units remaining.") # Simulate the process of restocking milk print("Restocking milk...") # Increase the stock by the quantity the worker can bring in one trip milk_stock += restock_quantity # Output the final stock level after restocking is complete print(f"Milk stock updated: {milk_stock} units, which is now sufficient.")
Nota
milk_stock += restock_quantity
é equivalente amilk_stock = milk_stock + restock_quantity
. Trata-se apenas de uma forma mais concisa e legível de expressar a mesma operação.
O fluxograma acima ilustra a lógica por trás do laço while
utilizado para gerenciar o estoque de leite. Observe como a variável de controle milk_stock
, iniciando em 15
, é incrementada pelo restock_quantity
a cada iteração do laço.
O laço continua executando até que milk_stock
ultrapasse o limite mínimo min_stock
de 50
, momento em que é interrompido.
Swipe to start coding
Gerencie o estoque de um supermercado utilizando laços while para garantir que Bread
, Eggs
e Apples
atendam aos seus níveis mínimos de estoque. As quantidades de reposição estão armazenadas em um dicionário.
- Utilize um laço
while
para verificar se"Bread"
está abaixo do estoque mínimo. Se estiver, aumente o estoque utilizando a quantidade de reposição correspondente do dicionário. - Repita a mesma lógica para
"Eggs"
e"Apples"
, cada um com seu próprio laçowhile
. - Após a reposição, percorra o dicionário
inventory
utilizando o laçofor
e exiba os níveis finais de estoque de todos os itens.
Requisitos de Saída
- Para cada item reabastecido, exiba:
"<Item> stock is low: <$current_stock> units. Restocking..."
- Após toda a reposição, exiba
Final Inventory after restocking:
seguido dos níveis de estoque atualizados:
"<Item>: <$current_stock> units (Minimum required: <$minimum_stock> units)"
- Insira uma linha em branco antes do inventário final utilizando
\n
. - Utilize f-strings para formatação e aspas simples dentro de aspas duplas para as chaves do dicionário.
Observação
Para evitar conflitos de sintaxe em f-strings, utilize aspas duplas ao redor da string e aspas simples dentro:
f"Bread stock is low: {inventory['Bread'][0]} units."
Utilize\n
para iniciar uma nova linha na saída:"First line.\nSecond line."
Solução
Obrigado pelo seu feedback!