For-loops
Welkom bij de sectie gewijd aan loops!
In dit hoofdstuk gaan we dieper in op hoe loops een belangrijk hulpmiddel zijn voor het automatiseren van repetitieve taken en essentieel zijn voor het efficiënt verwerken van lijsten en andere iterabele gegevenstypen.
Volg Alex terwijl hij het gebruik van for
-loops demonstreert om bewerkingen in onze supermarkt te vereenvoudigen:
Het gebruik van for
-loops in Python stelt je in staat om een codeblok herhaaldelijk uit te voeren voor elk item in een collectie (iterabel object). Dit is wat je moet weten over for
-loops:
Syntax
Start een for
-loop met het sleutelwoord for
, gevolgd door een variabelenaam zoals item
om elk element in de reeks te vertegenwoordigen. Daarna volgt het sleutelwoord in
en vervolgens het iterabele object, zoals groceryItems
. Het codeblok binnen de loop wordt één keer uitgevoerd voor elk element.
In dit voorbeeld fungeert item
als de iteratorvariabele die elk element in de lijst groceryItems
achtereenvolgens benadert en de functie print()
voor elk element uitvoert:
groceryItems = ["milk", "eggs", "cheese", "butter"] for item in groceryItems: # Code to be executed print(item)
Iteratie verwijst naar het proces van herhaaldelijk uitvoeren van een codeblok. Python ondersteunt twee hoofdtypen iteratie:
Definiete iteratie
Waarbij het aantal iteraties vooraf bekend is. for
-lussen zijn hiervan een klassiek voorbeeld en stoppen automatisch wanneer het einde van de reeks is bereikt.
Indefiniete iteratie
Waarbij de uitvoering doorgaat totdat aan een specifieke voorwaarde is voldaan, meestal afgehandeld door while
-lussen, die in het volgende hoofdstuk uitgebreid worden behandeld.
Voorbeeldtoepassingen
for
-lussen in Python kunnen worden gebruikt met elke iterabele (lists
, tuples
, dictionaries
, strings
), waardoor gegevens per element kunnen worden gemanipuleerd.
Of je nu items in een lijst, sleutels of waarden in een woordenboek, of tekens in een string wilt benaderen, for
-lussen bieden een duidelijke syntaxis die code vereenvoudigt voor repetitieve taken.
Hier zie je hoe je een for
-lus kunt gebruiken om over de elementen in een string en een tuple te itereren, vergelijkbaar met wat we bij lijsten hebben gezien:
# Print each letter in the string vegetable = "Carrot" for letter in vegetable: print(letter) # Tuple containing different categories of the grocery store categories = ("Produce", "Bakery", "Meat", "Dairy") for category in categories: print(category)
Bij gebruik van een for
-lus met een dictionary, worden standaard de sleutels van de dictionary doorlopen.
Dit is wat er gebeurt wanneer direct over een dictionary wordt geïtereerd:
# Dictionary of products and their stock counts productStock = {"milk": 120, "eggs": 200, "bread": 80} # Print each dictionary key print("Product list:") for product in productStock: print(product)
Merk op dat de iteratorvariabele product
alleen toegang heeft tot de sleutels van het woordenboek.
Om over de waarden van een woordenboek te itereren, kun je de methode values()
gebruiken.
Dit is handig voor bewerkingen waarbij alleen toegang tot de waarden nodig is, zonder verwijzing naar de sleutels:
# Dictionary of products and their stock counts productStock = {"milk": 120, "eggs": 200, "bread": 80} # Print each dictionary value print("Stock counts:") for stock in productStock.values(): print(stock)
Als je sleutels en waarden tegelijkertijd wilt benaderen, kun je met de methode items()
door sleutel-waardeparen in een woordenboek itereren.
Om deze methode in een for
-lus te gebruiken, geef je twee variabelen op vóór het in
-trefwoord — één voor de sleutel (product
) en één voor de waarde (stock
):
# Dictionary of products and their stock counts productStock = {"milk": 120, "eggs": 200, "bread": 80} # Print both the key and value for each dictionary item print("Inventory details:") for product, stock in productStock.items(): print(f"{product} has {stock} units in stock.")
Opmerking
In dit voorbeeld gebruiken we f-strings (ook wel geformatteerde string-literals genoemd) om variabelen direct in strings te plaatsen. De syntaxis is eenvoudig: voeg een
f
toe vóór het openingsaanhalingsteken"
en plaats variabelen of expressies tussen accolades{}
binnen de string. Deze methode maakt het combineren van strings en variabelen in printopdrachten veel leesbaarder, dus het is de moeite waard om te leren.
Op basis van kennis van if/else
, booleaanse operatoren en for
-lussen kan een eenvoudige voorraadcontrole op een woordenboek worden uitgevoerd:
# Product names as keys and their stock levels as values inventory = { "milk": 120, "eggs": 30, "bread": 80, "apples": 10 } # The threshold stock level that triggers a restock minimum_stock = 50 # Evaluating stock levels and deciding if restocking is necessary print("Checking inventory status:") for product, quantity in inventory.items(): if quantity < minimum_stock: print(f"{product} requires restocking. Only {quantity} units remain.") else: print(f"{product} has adequate stock with {quantity} units available.")
Opmerking
Je merkt misschien dat we
if
-statements binnen defor
-lus hebben geplaatst, wat extra inspringing aan hetif
-blok toevoegde. Zoals eerder vermeld, kan elk ingesprongen codeblok als onafhankelijk worden beschouwd, ongeacht waar het zich bevindt. Het belangrijkste is dat de inspringing consistent en correct is tussen de blokken.
Swipe to start coding
Beheer voorraad en promoties in een supermarkt door te itereren over de inventaris, restock-voorwaarden te controleren en promoties toe te passen.
- Loop door elk product in de
inventory
-dictionary. - Haal binnen de loop de
current_stock
enmin_stock
uit de inventarislijst. - Gebruik een
if
-statement om te controleren of de huidige voorraad kleiner dan of gelijk aan de minimale voorraad is:- Indien ja, print een restock-melding, verhoog de voorraad met
20
, werk de inventaris bij en print de update-melding.
- Indien ja, print een restock-melding, verhoog de voorraad met
- Gebruik een andere
if
-statement om te controleren of het product voorkomt in depromotions
-dictionary.
Uitvoervereisten
Print voor elk item:
-
--- Processing: <item> ---
-
Indien restocking nodig is:
<item> moet worden bijgevuld. Huidige voorraad: <current_stock>. Minimum vereist: <min_stock>
Bijgewerkte voorraad voor <item>: <updated_stock>
-
Indien promotie aanwezig is:
Promotie voor <item>: <promotion_details>
-
Zo niet:
Geen promoties voor <item>
Oplossing
Bedankt voor je feedback!