While-løkker
while
-løkker er det centrale værktøj til håndtering af ubestemt iteration, hvilket er nyttigt i situationer, hvor antallet af iterationer ikke er kendt på forhånd, såsom overvågning af lagerbeholdning indtil de opfylder en bestemt grænse.
Se med, når Alex demonstrerer, hvordan man bruger while
-løkker til at håndtere dynamiske situationer:
En while
-løkke i Python kører en kodeblok kontinuerligt, så længe en angivet betingelse forbliver True
.
Syntaks
For at starte en while
-løkke defineres en tællervariabel, efterfulgt af nøgleordet while
og en boolesk betingelse. Betingelsen efterfølges af et kolon :
, som angiver starten på løkkens kodeblok.
Løkken vil blive udført gentagne gange indtil betingelsen bliver False
. Typisk opdateres tællervariablen inde i løkken for til sidst at gøre betingelsen False
og stoppe løkken.
Se dette eksempel på en while
-løkke:
# 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
I dette eksempel fungerer queue_length
som vores tællervariabel, der starter ved 5
. For hver iteration af løkken mindskes værdien af queue_length
med 1
, indtil den når 0
. På dette tidspunkt afsluttes løkken, fordi betingelsen 0 > 0
evalueres til False
.
Bemærk
Det er afgørende at opdatere tællervariablen inde i løkken for til sidst at opfylde betingelsen for at stoppe løkken. Uden dette vil løkken køre uendeligt og forhindre yderligere kode i at blive udført.
Eksempel på anvendelse
Forestil dig, at du administrerer mælkebeholdningen i et supermarked. Du skal sikre, at beholdningen ikke falder under et bestemt niveau, og når det sker, skal du genopfylde for at opretholde beholdningsniveauet.
En while
-løkke er nyttig i denne situation, fordi den gør det muligt at genopfylde mælk i intervaller over flere iterationer, indtil beholdningen når det ønskede niveau. Uden en while
-løkke skulle du beregne den nøjagtige mængde mælk, der skal genopfyldes på én gang.
For eksempel kan en butiksmedarbejder kun genopfylde en fast mængde mælk pr. tur (f.eks. 20
pakker pr. genopfyldning). Hvis beholdningen ikke er fuldt genopfyldt, vender medarbejderen tilbage til lageret for at hente endnu en omgang mælk.
# 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.")
Bemærk
milk_stock += restock_quantity
svarer tilmilk_stock = milk_stock + restock_quantity
. Det er blot en mere kortfattet og læsbar måde at udtrykke den samme operation på.
Flowdiagrammet ovenfor illustrerer logikken bag while
-løkken, der bruges til at håndtere mælkebeholdningen. Bemærk, hvordan tællervariablen milk_stock
, der starter ved 15
, øges med restock_quantity
ved hver iteration af løkken.
Løkken fortsætter med at køre indtil milk_stock
overstiger grænseværdien min_stock
på 50
, hvorefter den stopper.
Swipe to start coding
Administrer en dagligvarebutiks lager ved at bruge while-løkker til at sikre, at Bread
, Eggs
og Apples
opfylder deres minimumslagerkrav. Genopfyldningsmængderne er gemt i et dictionary.
- Brug en
while
-løkke til at kontrollere, om"Bread"
er under sit minimumslager. Hvis det er tilfældet, øg lageret med den tilsvarende genopfyldningsmængde fra dictionaryen. - Gentag samme logik for
"Eggs"
og"Apples"
, hver med sin egenwhile
-løkke. - Efter genopfyldning, gennemgå
inventory
-dictionaryen med enfor
-løkke og udskriv de endelige lagerniveauer for alle varer.
Outputkrav
- For hver genopfyldt vare, udskriv:
"<Item> stock is low: <$current_stock> units. Restocking..."
- Efter al genopfyldning, udskriv
Final Inventory after restocking:
efterfulgt af de opdaterede lagerniveauer:
"<Item>: <$current_stock> units (Minimum required: <$minimum_stock> units)"
- Indsæt en ny linje før den endelige lagerstatus ved at bruge
\n
. - Brug f-strings til formatering og enkeltanførselstegn inden i dobbelte anførselstegn for dictionary-nøgler.
Bemærk
For at undgå syntaksproblemer i f-strings, brug dobbelte anførselstegn omkring strengen og enkeltanførselstegn indeni:
f"Bread stock is low: {inventory['Bread'][0]} units."
Brug\n
til at starte en ny linje i outputtet:"First line.\nSecond line."
Løsning
Tak for dine kommentarer!