Werk herhalen met lussen · oefening
Sla over met continue en blijf vragen
Soms moet een lus niet eindigen, maar gewoon één onbruikbare waarde overslaan en de volgende proberen. Dat is de taak van continue.
Als Python bij continue komt, slaat het de rest van de huidige ronde over en keert het terug naar het begin van de lus.
Sla één waarde over, niet de hele lus
Begin met een for-lus, waarin ‘de volgende ronde’ duidelijk zichtbaar is:
De lege string wordt overgeslagen. De lus eindigt niet, maar gaat verder met "no". Houd dit verschil goed uit elkaar:
breakbeëindigt de lus.continueslaat de rest van het blok over. Eenfor-lus vraagt daarna om het volgende item; eenwhile-lus controleert opnieuw haar voorwaarde.
Bij een kort blok kan een gewone if duidelijker zijn:
answers = ["yes", "", "no"]
for answer in answers:
if answer != "":
print(f"Recorded: {answer}")
Gebruik continue als vroeg overslaan het nuttige werk overzichtelijk houdt, niet alleen omdat het sleutelwoord bestaat en belangrijk lijkt. Python heeft al genoeg drama.
Vraag opnieuw na een onbruikbaar antwoord
Invoer geeft continue een praktische taak. Je weet niet hoeveel pogingen iemand nodig heeft, dus gebruik while True. Wijs een onbruikbaar antwoord af met continue en verlaat de lus met de al bekende break als het antwoord goed is:
options = ["yes", "no"]
while True:
answer = input("Please answer yes or no: ").strip().lower()
if answer not in options:
print(f"Sorry, {answer} is not an option. Try again.")
continue
break
print(f"Thank you. You answered {answer}.")
Let op de volgorde. De vraag werkt answer bij voordat continue kan worden uitgevoerd. Een verkeerd antwoord toont hulp en springt terug naar de vraag. Een goed antwoord komt voorbij de if, bereikt break en verlaat de lus.
Het antwoord wordt meteen bij binnenkomst opgeschoond. Iemand die YES typt, bedoelde nog steeds yes. Diegene met een spatie laten worstelen leert weinig.
Zorg voor voortgang vóór continue
In een while-lus verandert Python niets voor je. Als continue over de enige wijziging springt, kan de lus vastlopen:
count = 0
while count < 3:
if count == 1:
continue
count += 1
Als count gelijk wordt aan 1, slaat continue de wijziging over. De volgende ronde ziet dezelfde waarde en slaat die weer over, eindeloos lang.
De invoerlus vermijdt dat probleem, omdat input() een nieuw antwoord toewijst vóór de beslissing om verder te gaan. Controleer bij continue in elke while-lus of de variabele die de voortgang stuurt eerst verandert.
Wat drukt deze code af?
for value in [2, 0, 4]:
if value == 0:
continue
print(value)Wat doet .strip().lower() voor de validatielus?
Bouw nu zelf hetzelfde vriendelijke pad dat opnieuw om een antwoord vraagt.
Opdracht
Schrijf een programma dat om een voorkeur voor een soort dag blijft vragen totdat het een bruikbaar antwoord krijgt en meldt hoeveel keer het moest vragen.
Maak het programma af met een while True-lus, zodat:
elke vraag de tekst
Weekday or weekend?gebruikt en het antwoord opschoont met.strip().lower();attemptselk gegeven antwoord telt, ook de onbruikbare;een antwoord dat niet in
daysstaat bijcontinuekomt en opnieuw laat vragen;een bruikbaar antwoord bij
breakkomt;de twee overzichtsregels één keer na de lus worden uitgevoerd.
Verwachte laatste regels:
You chose: weekend
Attempts: 3
Typ bij het zelf uitvoeren eerst een of twee verkeerde antwoorden en kijk hoe het programma opnieuw vraagt. Submit voert je programma uit met eigen voorbereide antwoorden. De exacte aantallen hierboven komen dus daarvan, niet van wat je zelf typte.