Cicli While
I cicli while
sono lo strumento principale per gestire l'iterazione indefinita, utile in scenari in cui il numero di iterazioni non è noto in anticipo, come il monitoraggio dei livelli di inventario fino a quando non raggiungono una soglia specifica.
Guarda come Alex dimostra l'utilizzo dei cicli while
per gestire situazioni dinamiche:
Un ciclo while
in Python esegue continuamente un blocco di codice finché una condizione specificata rimane True
.
Sintassi
Per iniziare un ciclo while
, si definisce una variabile contatore e si utilizza la parola chiave while
seguita da una condizione booleana. La condizione è seguita da due punti :
, che indicano l'inizio del blocco di codice del ciclo.
Il ciclo verrà eseguito ripetutamente finché la condizione diventa False
. Tipicamente, la variabile contatore viene aggiornata all'interno del ciclo per far sì che la condizione diventi False
e interrompere il ciclo.
Ecco un esempio di ciclo 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
In questo esempio, queue_length
funge da variabile contatore, iniziando da 5
. Ad ogni iterazione del ciclo, il valore di queue_length
diminuisce di 1
fino a raggiungere 0
. A quel punto, il ciclo termina perché la condizione 0 > 0
risulta False
.
Nota
È fondamentale aggiornare la variabile contatore all'interno del ciclo per arrivare a soddisfare la condizione di uscita dal ciclo. In caso contrario, il ciclo verrà eseguito all'infinito, impedendo l'esecuzione del codice successivo.
Applicazione d'esempio
Immagina di gestire la scorta di latte in un supermercato. Devi assicurarti che la scorta non scenda sotto un certo livello e, quando ciò accade, dovresti rifornire per mantenere il livello desiderato.
Un ciclo while
è utile in questa situazione perché consente di rifornire il latte a incrementi, attraverso più iterazioni, fino a raggiungere il livello desiderato. Senza un ciclo while
, dovresti calcolare la quantità esatta di latte da rifornire tutta in una volta.
Ad esempio, considera che un addetto può rifornire solo una quantità fissa di latte per ogni viaggio (ad esempio, 20
confezioni per rifornimento). Se la scorta non è completamente ripristinata, l'addetto torna al magazzino per portare un altro lotto di latte.
# 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
. Si tratta semplicemente di un modo più conciso e leggibile per esprimere la stessa operazione.
Il diagramma di flusso sopra illustra la logica alla base del ciclo while
utilizzato per gestire l'inventario del latte. Si noti come la variabile contatore milk_stock
, che parte da 15
, venga incrementata della restock_quantity
a ogni iterazione del ciclo.
Il ciclo continua a essere eseguito finché milk_stock
non supera la soglia min_stock
di 50
, momento in cui si interrompe.
Swipe to start coding
Gestione dell'inventario di un negozio di alimentari utilizzando cicli while per garantire che Bread
, Eggs
e Apples
rispettino i livelli minimi di scorta. Le quantità di riassortimento sono memorizzate in un dizionario.
- Utilizzare un ciclo
while
per verificare se"Bread"
è al di sotto del livello minimo di scorta. In tal caso, aumentare la scorta utilizzando la quantità di riassortimento corrispondente dal dizionario. - Ripetere la stessa logica per
"Eggs"
e"Apples"
, ciascuno con il proprio ciclowhile
. - Dopo il riassortimento, scorrere il dizionario
inventory
con un ciclofor
e stampare i livelli finali di scorta per tutti gli articoli.
Requisiti di output
- Per ogni articolo riassortito, stampare:
"<Item> stock is low: <$current_stock> units. Restocking..."
- Dopo tutti i riassortimenti, stampare
Final Inventory after restocking:
seguito dai livelli di scorta aggiornati:
"<Item>: <$current_stock> units (Minimum required: <$minimum_stock> units)"
- Inserire una nuova riga prima dell'inventario finale utilizzando
\n
. - Utilizzare f-string per la formattazione e le virgolette singole all'interno delle stringhe tra virgolette doppie per le chiavi del dizionario.
Nota
Per evitare conflitti di sintassi nelle f-string, utilizzare le virgolette doppie attorno alla stringa e le virgolette singole all'interno:
f"Bread stock is low: {inventory['Bread'][0]} units."
Utilizzare\n
per iniziare una nuova riga nell'output:"First line.\nSecond line."
Soluzione
Grazie per i tuoi commenti!