- Leren
- Informatica & ICT
- Programmeren
- Inleiding tot programmeren met Python
- If-instructies in Python
If-instructies in Python: voorwaarden en booleaanse logica
and, or en not en gebruik if, elif en else om voor elke situatie de juiste code uit te voeren. Nest daarna keuzes, gebruik de waarheidsinterpretatie van waarden, test elke tak met zorgvuldig gekozen invoer en kies met de match-instructie uit verschillende gevallen.BeginnerLes 2 van 10 in Cursus Inleiding tot programmeren met Python
Wat je leert
- Schrijf vergelijkingen met de zes vergelijkingsoperatoren van Python, voorspel of ze
TrueofFalseopleveren voor getallen en tekst en voorkom verwisselingen waardoor een voorwaarde ongemerkt onjuist wordt.- Vergelijk getallen met de zes vergelijkingsoperatorenGebruik
==,!=,<,<=,>en>=om getallen te vergelijken, lees elk resultaat als een booleaanse waarde en maak onderscheid tussen vergelijken en toekennen. - Vergelijk tekst, verschillende typen en bereikenVergelijk strings exact en in alfabetische volgorde, zet ingetypte invoer om voordat je die met getallen vergelijkt en controleer bereiken, lidmaatschap en
Nonemet de juiste operator.
- Vergelijk getallen met de zes vergelijkingsoperatoren
- Schrijf keuzes met één, twee en meerdere mogelijkheden, zodat een programma voor elke situatie het juiste codeblok uitvoert, en voorspel precies welke regels bij een bepaalde invoer worden uitgevoerd.
- Voer code alleen uit als een voorwaarde waar isSchrijf een
if-instructie met de kop, dubbele punt en het ingesprongen codeblok en volg stap voor stap welke regels worden uitgevoerd en welke worden overgeslagen. - Kies tussen twee acties met if en elseVoeg een
else-tak toe zodat precies één van twee blokken wordt uitgevoerd en gebruik een voorwaardelijke expressie om op één regel tussen twee waarden te kiezen. - Kies uit meerdere gevallen met elifBouw
if–elif–else-ketens die voorwaarden op volgorde controleren en alleen de eerste tak uitvoeren waarvan de voorwaarde waar is. Zet de controles zo op volgorde dat elke invoer in het juiste geval terechtkomt.
- Voer code alleen uit als een voorwaarde waar is
- Combineer en ontken voorwaarden met
and,orennot, voorspel hun resultaten met waarheidstabellen en lees langere voorwaarden in de volgorde waarin Python ze evalueert.- Combineer en ontken voorwaarden met and, or en notGebruik waarheidstabellen om de resultaten van
and,orennotte voorspellen, vertaal alledaagse regels naar gecombineerde voorwaarden en voorkom de klassieke fout metor. - Voorspel hoe Python langere voorwaarden evalueertPas operatorprioriteit en kortsluitevaluatie toe, voeg haakjes toe die de bedoelde groepering verduidelijken en herschrijf ontkende voorwaarden met de wetten van De Morgan.
- Combineer en ontken voorwaarden met and, or en not
- Nest keuzes waar de ene keuze van de andere afhangt, toets waarden rechtstreeks via hun waarheidsinterpretatie en volg en test elke tak, zodat de logica voor elke invoer klopt.
- Nest keuzes binnen andere keuzesPlaats een
if-instructie binnen een andere tak als een tweede keuze van de eerste afhangt, lees de nesting af aan de inspringing en verminder het aantal nestingsniveaus alsandofelifhetzelfde eenvoudiger uitdrukt. - Toets waarden rechtstreeks met hun waarheidsinterpretatieVoorspel welke waarden Python in een voorwaarde als waar of onwaar beschouwt, gebruik dit om kort op lege invoer te controleren en voorkom valkuilen waarbij
0,"0"of"False"zich onverwacht gedragen. - Volg en test elke tak van een keuzeVolg een keuze met de hand, kies testinvoer die elke tak en elke grens bereikt en herstel voorwaarden die hiaten, overlappingen of takken veroorzaken die nooit kunnen worden uitgevoerd.
- Nest keuzes binnen andere keuzes
- Gebruik de
match-instructie van Python om één waarde met meerdere patronen te vergelijken, waarden aan namen te binden en aanvullende voorwaarden toe te voegen, en bepaal wanneermatchduidelijker is dan eenif–elif-keten.- Toets een waarde aan vaste gevallenSchrijf een
match-instructie met patronen met letterlijke waarden, alternatieven en een jokerpatroon, en voorspel welk ene geval wordt uitgevoerd. - Bind waarden aan namen en voeg aanvullende voorwaarden toe aan gevallenGebruik bindingspatronen en
asom de overeenkomende waarde een naam te geven, voeg aanvullendeif-voorwaarden toe voor voorwaarden die een letterlijke waarde niet kan uitdrukken en voorkom de valkuil waarbij een variabelenaam in een geval met alles overeenkomt.
- Toets een waarde aan vaste gevallen
If-instructies in Python: uitleg
1Vergelijkingen die ja of nee als antwoord geven
Een programma heeft een nauwkeurige controle nodig voordat het een actie kan kiezen. Vergelijkingen zetten vragen over waarden om in antwoorden die Python kan gebruiken: is de score hoog genoeg, komt het antwoord overeen of ligt de invoer binnen een geldig bereik? Voor getallen en tekst gelden verschillende vergelijkingsregels. Als je die regels zorgvuldig leest, herken je fouten die op het scherm aannemelijk lijken, vooral op een grens of wanneer ingetypte cijfers nog als tekst zijn opgeslagen.
1.1 Getallen, gelijkheid en grenzen
Een vergelijking stelt een vraag over waarden. Het resultaat is een booleaanse waarde: True of False. Dit zijn waarden van het type bool, geschreven met een hoofdletter aan het begin en zonder aanhalingstekens. "True" is tekst; true met een kleine letter is een naam en veroorzaakt een NameError als die niet is gedefinieerd.
Kies de operator die bij de regel past
| Operator | Vraag | Met x = 7 |
|---|---|---|
== | Gelijk aan? | x == 7 geeft True |
!= | Niet gelijk aan? | x != 7 geeft False |
< | Kleiner dan? | x < 7 geeft False |
<= | Kleiner dan of gelijk aan? | x <= 7 geeft True |
> | Groter dan? | x > 5 geeft True |
>= | Groter dan of gelijk aan? | x >= 7 geeft True |
De operatoren met twee tekens blijven bij elkaar, met = achteraan. Schrijf <=, niet =<. Een geheel getal en een zwevendekommagetal kunnen gelijk zijn: 7 == 7.0 geeft True omdat hun getalswaarden overeenkomen.
Een vergelijking is een expressie, dus je kunt het resultaat afdrukken of opslaan:
x = 7
is_big = x > 5
print(is_big)
Python evalueert x > 5, krijgt True en kent die waarde toe aan is_big. De uitvoer is True. Een naam zoals is_big of has_ticket laat een booleaanse variabele lezen als een ja-neevraag.
Houd toekenning en vergelijking uit elkaar
x = 5 slaat een nieuwe waarde op in x. x == 5 controleert de huidige waarde zonder die te veranderen. if x = 5: schrijven is een syntaxisfout. De omgekeerde fout kan moeilijker op te merken zijn:
x = 7
x == 5
print(x)
In een script wordt het resultaat van de vergelijking niet gebruikt. De uitvoer blijft 7; de middelste regel kent nooit 5 toe.
Reken eerst en vergelijk daarna
In 2 + 3 > 4 telt Python eerst op tot 5 en vergelijkt daarna 5 > 4. Het resultaat is True. Een nuttige controle voor gehele getallen is n % 2 == 0: % geeft de rest na deling en even getallen laten rest 0 over bij deling door 2.
Voor n = 10 zijn de stappen 10 % 2 en daarna 0 == 0, wat True geeft. Voor n = -7 is -7 % 2 gelijk aan 1, dus is de controle op een even getal False. Met de positieve deler 2 is de rest in Python voor een oneven geheel getal 1, ook als dat getal negatief is.
Bepaal of de grens meetelt
“Minstens 18” omvat 18: age >= 18. “Ouder dan 18” sluit die leeftijd uit: age > 18. Zo is “jonger dan 13” gelijk aan age < 13 en “niet meer dan 3” aan bags <= 3. Test de grens zelf wanneer je een operator kiest. Bij age = 18 is de eerste leeftijdscontrole waar en de tweede onwaar.
Houd rekening met kleine verschillen tussen zwevendekommagetallen
Veel decimale breuken hebben alleen een binaire benadering. Python slaat 0.1 + 0.2 op als 0.30000000000000004, dus is 0.1 + 0.2 == 0.3 gelijk aan False.
Gebruik voor een vergelijking met een absolute tolerantie van 1e-9:
print(abs((0.1 + 0.2) - 0.3) < 1e-9)
abs() geeft de grootte van het verschil zonder het teken. Dat verschil is kleiner dan een miljardste, dus drukt deze controle True af. De tolerantie geeft aan hoeveel verschil deze controle accepteert; het is geen exacte gelijkheid.
Belangrijkste punten
- Vergelijkingen leveren de booleaanse waarden
TrueenFalseop. =kent een waarde toe;==vergelijkt waarden zonder ze te veranderen.- Kies
<of<=en>of>=op basis van de vraag of de grens meetelt. - Rekenkundige bewerkingen gaan vóór vergelijkingen, dus
n % 2 == 0controleert of een getal even is. - Voor berekende zwevendekommagetallen kan een controle met een tolerantie nodig zijn in plaats van exacte gelijkheid.
1.2 Tekst, ingetypte getallen en bereiken
De waarden aan beide kanten van een vergelijking zijn even belangrijk als de operator. Tekst kan eruitzien als een getal, maar toch de regels voor strings volgen.
Vergelijk tekst exact
Bij gelijkheid van strings wordt elk teken gecontroleerd, inclusief hoofdletters, kleine letters en spaties. "yes" == "Yes" is False en "yes" == "yes " is ook False. Vergelijk een opgeschoonde kopie om gewone verschillen in hoofdletters en spaties aan de randen te accepteren:
answer = " Yes "
print(answer.strip().lower() == "yes")
strip() verwijdert witruimte aan beide uiteinden. lower() zet letters om in kleine letters. De opgeschoonde tekst is "yes", dus is het resultaat True. De opgeslagen answer blijft ongewijzigd, tenzij je de opgeschoonde waarde eraan toekent.
Begrijp de volgorde van strings
Python vergelijkt strings van links naar rechts met Unicodecodepunten, de getallen die aan tekens zijn toegekend. Het stopt bij het eerste ongelijke paar. Bij Engelse letters zonder accent en met dezelfde hoofdlettergrootte volgt dit de alfabetische volgorde: "apple" < "banana" is True. Wanneer de ene string het begin van de andere is, komt de kortere eerst: "cat" < "catalog" is True.
Dit is geen volledige sorteervolgorde zoals in een woordenboek. A tot en met Z hebben codepunten 65–90 en a tot en met z hebben 97–122. Daarom is "Zebra" < "apple" gelijk aan True. Ook de é met accent komt na z, dus is "zebra" < "éclair" gelijk aan True.
Cijfers in strings volgen dezelfde tekenregel. "10" < "9" is True: de eerste vergelijking is tussen "1" en "9", niet tussen de getallen tien en negen.
Zet invoer om voor keuzes op basis van getallen
input() geeft een string terug. Als iemand 5 intypt, geeft "5" == 5 de waarde False; de gelijkheidscontrole zet de tekst niet om. Een vergelijking van de volgorde werkt anders: "5" < 10 veroorzaakt een TypeError, omdat Python die string en dat gehele getal niet samen kan ordenen.
age = int(input("Age: "))
print(age >= 18)
Voor de ingetypte tekst "18" levert int() het gehele getal 18 op en drukt de controle True af. Gebruik float() als de invoer een decimale waarde voorstelt.
Gebruik een keten voor een bereik
0 <= score <= 100 vereist dat beide aangrenzende vergelijkingen waar zijn. Het betekent 0 <= score and score <= 100. Voor score = 105 slaagt de onderste controle, maar niet de bovenste, dus is de hele keten False.
| Regel | Pythoncontrole |
|---|---|
| Van 1 tot en met 10, inclusief beide grenzen | 1 <= x <= 10 |
| Strikt tussen 1 en 10 | 1 < x < 10 |
Een keten vergelijkt alleen aangrenzende waarden. 1 < 3 > 2 is True omdat 1 < 3 en 3 > 2 beide waar zijn; de keten vergelijkt 1 niet rechtstreeks met 2.
Kies zo nodig voor lidmaatschap of identiteit
De lidmaatschapsoperatoren controleren of tekst binnen tekst voorkomt. "nan" in "banana" is True; "Ban" in "banana" is False. "x" not in "banana" is True.
None staat voor geen waarde. Controleer erop met result is None of result is not None. De operator is vraagt of het om precies hetzelfde object gaat, terwijl == vraagt of waarden gelijk zijn. Gebruik == voor gelijkheid van getallen en strings: een identiteitscontrole zoals x is 5 is daarvoor onbetrouwbaar en veroorzaakt een SyntaxWarning.
Belangrijkste punten
- Vergelijkingen van strings zijn hoofdlettergevoelig en houden rekening met spaties.
- Zet ingetypte cijfers om met
int()offloat()voordat je getallen vergelijkt. - Een aaneengeschakelde vergelijking voor een bereik vereist dat elke aangrenzende vergelijking slaagt.
incontroleert lidmaatschap;is Nonecontroleert op de aanduiding voor geen waarde.
2Kiezen welke code wordt uitgevoerd
Een vergelijking wordt nuttig wanneer ze een actie aanstuurt. Python markeert elke keuze met een voorwaarde en een ingesprongen blok, zodat de opmaak laat zien welke regels samen worden uitgevoerd. Begin met een blok dat kan worden overgeslagen, geef het daarna een alternatief en kies ten slotte uit meerdere gevallen. Volg het programma op volgorde: een latere regel kan een waarde gebruiken die door een eerdere tak is ingesteld en een latere controle in een keten wordt mogelijk nooit bereikt.
2.1 De if-kop en het bijbehorende blok
Een if-instructie voert een blok alleen uit als de voorwaarde waar is. De kop begint met if, geeft de voorwaarde en eindigt met een dubbele punt. De regels eronder springen in om te laten zien dat ze bij de inhoud horen.
Volg een keuze met één mogelijke actie
temperature = 31
if temperature > 30:
print("Hot day")
print("Drink water")
print("Done")
Bij de kop leest Python de huidige waarde van temperature. De vergelijking 31 > 30 is True, dus worden beide ingesprongen regels uitgevoerd. Daarna bereikt het programma de regel buiten het blok. De uitvoer is:
Hot day
Drink water
Done
Verander de eerste regel in temperature = 25. Nu is 25 > 30 gelijk aan False, dus slaat Python de hele inhoud over. Alleen Done wordt afgedrukt. De voorwaarde wordt één keer gecontroleerd wanneer Python de kop bereikt; een if blijft die niet controleren.
Laat inspringing zien wat bij het blok hoort
Gebruik volgens de conventie 4 spaties voor elk inspringniveau. Regels op hetzelfde niveau horen bij hetzelfde blok. Terugkeren naar het buitenste niveau beëindigt het blok. Als je print("Done") 4 spaties laat inspringen, wordt die regel onderdeel van de if-inhoud en alleen afgedrukt als aan de voorwaarde is voldaan.
Een stroomdiagram toont dezelfde keuze met een ruit. Het pad voor waar gaat de inhoud in, het pad voor onwaar gaat eromheen en de paden komen samen bij de volgende instructie buiten het blok.
| Probleem | Wat je moet herstellen |
|---|---|
| Ontbrekende dubbele punt | Sluit de kop af met :. |
| Geen ingesprongen inhoud | Laat de regels die door if worden aangestuurd inspringen. |
| Inconsistente inspringing | Lijn instructies die bij hetzelfde blok horen uit. |
| Tabs en spaties door elkaar | Stel de editor in om spaties in te voegen. |
Python kan voor deze problemen SyntaxError, IndentationError of TabError melden. Begin bij de kop en de inspringing rond de gemelde regel. Ronde haakjes rond de voorwaarde zijn optioneel; if temperature > 30: is de gebruikelijke vorm.
De inhoud mag niet leeg zijn. Als je ruimte openlaat voor een actie, schrijf dan een ingesprongen pass. Dit is een geldige instructie die niets doet:
if temperature > 30:
pass
Afzonderlijke controles zijn onafhankelijk
score = 95
if score >= 50:
print("Pass")
if score >= 90:
print("Excellent")
Python bereikt beide koppen. Beide voorwaarden zijn waar, dus worden beide meldingen afgedrukt. Afzonderlijke if-instructies passen bij regels waarvan de acties allemaal op dezelfde invoer van toepassing kunnen zijn.
Geef latere code een bruikbare waarde
Een naam waaraan alleen binnen het blok een waarde wordt toegekend, wordt mogelijk nooit aangemaakt:
x = 0
if x > 0:
message = "positive"
print(message)
In een nieuw script wordt het blok overgeslagen en heeft message geen waarde, dus veroorzaakt de laatste regel een NameError. Een oplossing is vóór de keuze een beginwaarde opgeven:
x = 0
message = "not positive"
if x > 0:
message = "positive"
print(message)
Nu heeft de latere regel op beide paden een waarde. Voor nul drukt die not positive af; voor een positieve x vervangt het blok die tekst door positive.
Belangrijkste punten
- Een
if-kop eindigt met:, gevolgd door een ingesprongen blok. - Bij een onware voorwaarde wordt het hele blok overgeslagen; de uitvoering gaat daarna verder.
- Afzonderlijke
if-instructies worden elk gecontroleerd wanneer ze worden bereikt. - Gebruik een beginwaarde of ken in elke tak een waarde toe voordat je een variabele later uitleest.
passlevert een geldig blok op dat niets doet.
2.2 Twee paden en een waarde om te kiezen
Een if–else-instructie kiest één van twee blokken. Als de voorwaarde waar is, voert Python het if-blok uit. Anders voert het het else-blok uit. Wanneer de uitvoering deze keuze bereikt, wordt precies één blok uitgevoerd.
Lijn de alternatieven uit
number = int(input("Enter a whole number: "))
if number % 2 == 0:
print(number, "is even")
else:
print(number, "is odd")
Voor invoer 14 is de rest 0, dus is de uitvoer 14 is even. Voor invoer -7 is de rest 1, dus is de uitvoer -7 is odd. De else hoort bij de if op hetzelfde inspringniveau. Het bijbehorende blok heeft een eigen inspringing.
Na else staat geen voorwaarde: het betekent dat de eerdere voorwaarde onwaar was. else number < 0: is een syntaxisfout. Zet de clausule direct na het if-blok; een niet-ingesprongen instructie die er niet bij hoort, verbreekt de structuur als die ertussen staat.
Controleer wat “al het andere” omvat
Bij if answer == "yes": betekent een else niet alleen "no". Die accepteert ook "maybe", "Yes" en "", omdat geen ervan gelijk is aan "yes". Dit is nuttig als alle resterende invoer dezelfde actie vereist. Als meerdere afgewezen invoeren verschillende reacties nodig hebben, zijn verdere controles nodig.
Ken op beide paden een waarde toe
Een verzendregel geeft gratis verzending bij totaalbedragen van minstens € 50 en rekent anders € 5,99:
total = 42.50
if total >= 50:
shipping = 0
else:
shipping = 5.99
print(total + shipping)
Eerst geeft 42.50 >= 50 de waarde False. Python slaat de toekenning van 0 over, voert de else uit en slaat 5.99 op. De laatste regel staat buiten beide blokken en drukt 48.49 af. Verander total in 60: het eerste blok slaat 0 op, het andere wordt overgeslagen en de laatste regel drukt 60 af. Beide routes definiëren shipping voordat die wordt gebruikt.
Kies een waarde met een voorwaardelijke expressie
Als alleen de toe te kennen waarde verschilt, kan een voorwaardelijke expressie dit op één regel uitdrukken:
shipping = 0 if total >= 50 else 5.99
De vorm is value_if_true if condition else value_if_false. Hoewel de waarde voor waar op de pagina eerst staat, evalueert Python eerst de voorwaarde. Het evalueert alleen de gekozen waarde en kent het resultaat daarna toe aan shipping.
Een ander voorbeeld is label = "even" if n % 2 == 0 else "odd". Voor n = 14 kiest dit "even". Voor n = -7 kiest dit "odd".
| Nodig | Geschikte vorm |
|---|---|
| Meerdere acties op een van beide paden | Volledige if–else-blokken |
| Eén van twee waarden | Voorwaardelijke expressie |
De expressie vereist beide waarden. x = 1 if flag is onvolledig en veroorzaakt een SyntaxError omdat er geen else-waarde is. Een volledige if-instructie mag else weglaten omdat ze op het pad voor onwaar eenvoudig geen actie kan uitvoeren; een expressie moet nog steeds een waarde opleveren.
Belangrijkste punten
else:heeft geen voorwaarde en staat op hetzelfde inspringniveau als de bijbehorendeif.- Een
elseomvat alle invoer die niet aan de voorwaarde voldoet. - Als je in beide blokken een waarde aan dezelfde variabele toekent, is die na beide paden beschikbaar.
- Een voorwaardelijke expressie heeft de vorm
a if condition else ben evalueert alleen de gekozen waarde.
2.3 Meerdere gevallen in een bewuste volgorde
Gebruik elif, een afkorting van “else if”, om nog een controle aan een keuze toe te voegen. Python probeert de voorwaarden van boven naar beneden. De eerste ware voorwaarde bepaalt welke tak wordt uitgevoerd en de rest van die keten wordt overgeslagen.
Volg een keuze voor een beoordeling
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(grade)
De eerste controle, 85 >= 90, is onwaar. De tweede, 85 >= 80, is waar, dus slaat Python "B" op. Het controleert de overige voorwaarden niet en gaat de else niet in. De uitvoer is B.
| Score | Eerste geslaagde route | Beoordeling |
|---|---|---|
90 | score >= 90 | A |
89 | score >= 80 | B |
60 | score >= 60 | D |
59 | Afsluitende else | F |
Gebruik wat eerdere mislukte controles je vertellen
Als elif score >= 80: wordt bereikt, weet je al dat de score onder 90 ligt. Voor gehele scores omvat deze tak 80 tot en met 89. Door and score < 90 toe te voegen, herhaal je een controle die het programma al heeft afgehandeld.
De volgorde is belangrijk omdat deze bereiken overlappen. Als score >= 60 eerst komt, vangt die 85 en 95 af voordat de controles voor hun hogere beoordelingen worden bereikt. Zet bij controles op een ondergrens met >= de hoogste drempelwaarde eerst. Begin bij controles op een bovengrens met < met de laagste drempelwaarde.
Houd één keuze in één keten
Als je de gereserveerde woorden elif vervangt door if, verandert het gedrag. Bij een score van 85 kent de controle voor 80 eerst "B" toe, daarna kent de controle voor 70 "C" toe en de controle voor 60 kent "D" toe. De eindwaarde is "D". Elke nieuwe if begint een onafhankelijke keuze.
Dit onderscheid heeft ook gevolgen voor else. In een groep afzonderlijke if-instructies hoort een afsluitende else alleen bij de bijbehorende if, niet bij de hele groep. Houd de takken verbonden als ze samen één indeling voorstellen.
Houd rekening met grenzen en invoer die niet overeenkomt
Een elif-keten mag een willekeurig aantal extra controles hebben en de afsluitende else is optioneel. Zonder resttak wordt mogelijk geen blok uitgevoerd:
temp = 20
if temp < 18:
print("Cool")
elif temp > 24:
print("Warm")
Aan geen van beide voorwaarden is voldaan. Voeg else: toe met een ingesprongen print("Comfortable") als elke temperatuur een melding nodig heeft. Zo blijft ook bij t < 18 gevolgd door t > 18 precies 18 zonder overeenkomst. Bij de beoordelingsgrenzen zou score > 90 de waarde 90 naar de "B"-tak sturen.
Tekstmenu’s gebruiken dezelfde structuur: controleer choice == "1", daarna choice == "2" en geef voor al het andere de reactie "Unknown option". Deze controles vergelijken strings omdat input() tekst teruggeeft. Als veel controles één waarde met vaste keuzes vergelijken, biedt match een andere manier om de keuze vorm te geven.
Belangrijkste punten
- Alleen de eerste tak met een ware voorwaarde in een
if–elif-keten wordt uitgevoerd. - Eerdere onware controles beperken welke invoer een latere tak kan bereiken.
- Zet overlappende drempelwaarden zo op volgorde dat een brede controle een specifieker geval niet verbergt.
- Afzonderlijke
if-instructies kunnen meerdere blokken uitvoeren en eerdere toekenningen overschrijven. - Een afsluitende
elsehandelt invoer af die aan geen van de voorwaarden voldoet. - Test de exacte drempelwaarden om hiaten en één-ernaast-fouten te vinden.
3Controles combineren zonder de regel te veranderen
Echte keuzes hangen vaak van meerdere feiten tegelijk af: een bereik heeft twee grenzen en toegang kan zowel toestemming als een beschikbare plaats vereisen. Booleaanse operatoren verbinden die feiten tot één voorwaarde. Ook de groepering en evaluatievolgorde zijn belangrijk, omdat Python kan stoppen voordat het een deel van een controle bereikt. Vertaal eerst de regel en volg daarna de expressie van links naar rechts, met aandacht voor haakjes en overgeslagen werk.
3.1 Beide, minstens één en het tegenovergestelde
Met de booleaanse operatoren and, or en not kun je een voorwaarde opbouwen uit eenvoudigere voorwaarden. Python schrijft ze als woorden met kleine letters.
Bekijk alle mogelijkheden
Voor booleaanse invoer geeft and alleen True als beide invoeren waar zijn. or geeft True als minstens één ervan waar is, ook als beide waar zijn. Dit is een inclusieve of.
A | B | A and B | A or B |
|---|---|---|---|
True | True | True | True |
True | False | False | True |
False | True | False | True |
False | False | False | False |
not keert een waarheidswaarde om: not True geeft False en not False geeft True. Een waarheidstabel vermeldt elke combinatie van booleaanse invoer. Voor twee invoeren zijn vier rijen nodig; voor drie zijn er acht nodig. Elke extra onafhankelijke booleaanse invoer verdubbelt het aantal combinaties.
Voor A and not B keer je eerst B om en combineer je het resultaat daarna met A. In de rij A = True, B = False is not B gelijk aan True, dus is het resultaat True. De andere drie rijen geven False.
Vertaal een regel naar volledige controles
Een museum geeft korting op de toegang aan bezoekers jonger dan 12 of van 65 jaar en ouder:
has_discount = age < 12 or age >= 65
Op leeftijd 10 slaagt de eerste vergelijking. Bij 65 slaagt de tweede. De leeftijden 30 en 64 voldoen aan geen van beide. Met and zou dezelfde leeftijd onder 12 en minstens 65 moeten zijn, wat niet kan.
Een attractie vereist een lengte van minstens 120 centimeter en geen hartaandoening:
can_ride = height >= 120 and not has_heart_condition
Aan beide eisen moet tegelijk zijn voldaan. Bij de minimumlengte met has_heart_condition = False slagen beide delen. Als niet aan een van de eisen is voldaan, is can_ride gelijk aan False.
Maak onderscheid tussen binnen en buiten een bereik
| Betekenis | Controle |
|---|---|
| Binnen 0 tot en met 100 | score >= 0 and score <= 100 |
| Buiten 0 tot en met 100 | score < 0 or score > 100 |
De controle voor binnen het bereik heeft beide grenzen nodig. Voor buiten het bereik hoeft slechts aan één grens niet te zijn voldaan. score < 0 and score > 100 kan voor één getal nooit waar zijn.
Elke vergelijking heeft beide kanten nodig. score >= 0 and <= 100 is onvolledige syntaxis. Een minder opvallend probleem wordt zonder fout uitgevoerd:
if answer == "y" or "yes":
print("Accepted")
Python ziet (answer == "y") or "yes". Wanneer de vergelijking onwaar is, zorgt de niet-lege string "yes" er toch voor dat de voorwaarde als waar wordt beschouwd. Herhaal de vergelijking: answer == "y" or answer == "yes".
Ook bij alledaagse formuleringen moet je opletten. “Gesloten op zaterdag en zondag” betekent day == "Saturday" or day == "Sunday"; één dag hoeft niet beide namen tegelijk te hebben. Ontken een booleaanse variabele rechtstreeks met not is_member. Een ontkende vergelijking zoals not (age >= 18) kan ook eenvoudiger worden geschreven als age < 18. De operatoren van Python zijn hier woorden, geen &&, || of !.
Belangrijkste punten
andvereist dat beide booleaanse invoeren waar zijn; de inclusieveorvereist er minstens één.notkeert een waarheidswaarde om en levert altijd een booleaanse waarde op.- Voor binnen een bereik is
andnodig; voor buiten het bereikor. - Herhaal de volledige vergelijking aan beide kanten van een booleaanse operator.
- Een waarheidstabel controleert elke combinatie, ook het geval waarin beide invoeren waar zijn.
3.2 Groepering, overgeslagen werk en ontkenning
Bij een langere voorwaarde moet je twee vragen beantwoorden: hoe zijn de delen gegroepeerd en welke delen evalueert Python daadwerkelijk? Operatorprioriteit beantwoordt de eerste vraag. Kortsluitevaluatie beantwoordt de tweede.
Bekijk eerst de groepering
Voor de operatoren die hier worden gebruikt, loopt de prioriteit van sterk naar zwak:
- Machtsverheffen:
**. - Vermenigvuldiging, deling, gehele deling, rest:
*,/,//,%. - Optelling en aftrekking:
+,-. - Vergelijkingen, waaronder
in,not in,isenis not. not, danand, danor.- De voorwaardelijke expressie:
a if condition else b.
Ronde haakjes veranderen de groepering. Zo wordt x > 3 or x < 0 and x != 5 gegroepeerd als x > 3 or (x < 0 and x != 5). Bij x = 5 is de linkervergelijking waar en wordt de hele rechtergroep overgeslagen. Het resultaat is True.
Bij (x > 3 or x < 0) and x != 5 maken de haakjes de eerste groep juist tot één operand van and. Bij x = 5 is die groep waar, maar x != 5 is onwaar, dus is het resultaat False.
Daarom accepteert is_weekend or is_holiday and is_sunny elk weekend, zelfs als het regent. Schrijf voor de regel “een vrije dag waarop het ook zonnig is” (is_weekend or is_holiday) and is_sunny.
Volg de evaluatie van links naar rechts
| Expressie | Wanneer Python B overslaat |
|---|---|
A and B | A wordt als onwaar beschouwd |
A or B | A wordt als waar beschouwd |
Bij and heeft een onwaar eerste deel al uitgesloten dat aan de hele voorwaarde wordt voldaan. Bij or heeft een waar eerste deel er al aan voldaan. De prioriteit dwingt Python niet om een overgeslagen operand te berekenen alleen omdat die sterker bindende operatoren bevat.
Je kunt dit gebruiken om een beschermende voorwaarde vóór een bewerking te plaatsen die zou mislukken:
count = 0
total = 50
is_large_average = count != 0 and total / count > 10
print(is_large_average)
count != 0 is onwaar, dus probeert Python 50 / 0 nooit. Het slaat False op en drukt die waarde af. Als je de operanden omdraait, wordt de deling eerst geprobeerd en ontstaat een ZeroDivisionError; de latere controle kan eerder werk niet beschermen.
Werk not door een gegroepeerde controle heen
De wetten van De Morgan herschrijven een ontkenning door elk deel te ontkennen en de verbindende operator te verwisselen:
| Oorspronkelijk | Equivalent |
|---|---|
not (A and B) | not A or not B |
not (A or B) | not A and not B |
“Geen tiener” kan worden gecontroleerd als not (age >= 13 and age <= 19). De equivalente directe controle is age < 13 or age > 19. De leeftijden 12 en 20 voldoen; 13, 16 en 19 niet.
Als je and behoudt nadat je beide delen hebt ontkend, verandert de regel. Bij A = True, B = False is not (A and B) waar, maar not A and not B onwaar. Vergelijk elke rij van de waarheidstabel wanneer je controleert of twee booleaanse vormen equivalent zijn.
Schrijf voor een variabele die al een booleaanse waarde bevat if is_valid: of if not is_valid:. Een vergelijking met True of False voegt een controle toe die de voorwaarde niet nodig heeft.
Belangrijkste punten
- Prioriteit groepeert een expressie; kortsluitevaluatie bepaalt welke operanden worden bereikt.
andslaat de rechteroperand over na een als onwaar beschouwde linkeroperand;ordoet dat na een als waar beschouwde linkeroperand.- Zet een beschermende voorwaarde vóór de bewerking die ze beschermt.
- De wetten van De Morgan ontkennen beide delen en verwisselen
andenor. - Gebruik ronde haakjes om de bedoelde groepering te tonen wanneer je
andenorcombineert. - Toets booleaanse variabelen rechtstreeks met hun naam of met
not.
4Keuzes gemakkelijk te volgen en te testen maken
Een keuze kan afhangen van een andere keuze en een waarde kan zonder expliciete vergelijking als voorwaarde dienen. Beide maken scripts korter, maar creëren ook paden die gemakkelijk over het hoofd worden gezien. Inspringing laat zien welke controles van eerdere keuzes afhangen; waarheidsinterpretatie verklaart hoe lege tekst en nul zich gedragen. Door die paden te volgen en exacte grenzen te testen, vind je ontbrekende reacties, overschreven waarden en takken die geen enkele invoer kan bereiken.
4.1 Keuzes binnen andere takken
Een geneste voorwaardelijke instructie plaatst één keuze binnen een tak van een andere. De binnenste keuze wordt alleen bereikt als de uitvoering die buitenste tak ingaat. Elk nestingsniveau voegt 4 spaties inspringing toe.
Volg de buitenste keuze vóór de binnenste keuze
has_ticket = True
age = 15
if has_ticket:
if age >= 13:
print("Enjoy the movie")
else:
print("This movie needs an adult")
else:
print("Please buy a ticket first")
Eerst is has_ticket waar, dus gaat Python het buitenste blok in. Daarna controleert het 15 >= 13, krijgt waar en drukt Enjoy the movie af. De binnenste en buitenste else-blokken worden beide overgeslagen.
Verander de leeftijd in 10 en behoud het kaartje. Python gaat nog steeds het buitenste blok in, maar aan de binnenste voorwaarde is niet voldaan, dus drukt het This movie needs an adult af. Met has_ticket = False wordt de leeftijdscontrole nooit bereikt; de buitenste else drukt Please buy a ticket first af.
Koppel elke else op basis van inspringing
Een else hoort bij de if op hetzelfde inspringniveau. Verplaatsen kan het gedrag veranderen, ook als het script geldig blijft. Bekijk deze kleinere variant:
if has_ticket:
if age >= 13:
print("Enter")
else:
print("Buy a ticket")
De else hoort bij if has_ticket:. Een 10-jarige met een kaartje krijgt geen melding. Verplaats die else en het bijbehorende blok één niveau naar binnen en ze hoort bij if age >= 13:. Nu krijgt hetzelfde kind Buy a ticket te zien, terwijl iemand zonder kaartje geen melding krijgt. De gewijzigde indeling drukt een andere regel uit.
In het volledige filmvoorbeeld heeft de binnenste if al een else. Als je daar de buitenste else naar binnen verplaatst, ontstaan twee alternatieven voor dezelfde if en een syntaxisfout.
Verminder de nesting bij twee eisen
Als er maar één actie is en geen van beide niveaus een else heeft, verwijdert and vaak een nestingsniveau:
if is_member and total >= 50:
print("Free shipping")
Dit voert dezelfde actie uit als een buitenste if is_member: met daarin een binnenste if total >= 50:. Aan beide eisen moet zijn voldaan en de tweede wordt pas bereikt nadat aan de eerste is voldaan. Behoud de nesting wanneer de buitenste takken eigen, verschillende acties nodig hebben, zoals bij het kopen van een kaartje.
Een else waarvan de enige actie een andere if–else is, kan een elif-keten worden. Voor positief, negatief en nul is de vorm zonder nesting if x > 0:, dan elif x < 0:, dan else:. Die behoudt dezelfde drie uitkomsten met minder inspringing.
Valideer voordat je indeelt
Een keuze voor een beoordeling moet scores buiten het toegestane bereik afwijzen voordat een letter wordt toegekend:
if 0 <= score <= 100:
if score >= 90:
print("A")
else:
print("Below A")
else:
print("Score must be between 0 and 100")
Bij score = 150 mislukt de buitenste controle, dus wordt geen beoordeling toegekend. Nesting maakt ook onmogelijke paden zichtbaar: een binnenste if x < 5: onder if x > 10: kan nooit slagen. Als de inspringing diep wordt, zoek dan naar gecombineerde eisen, een elif-keten of een eerdere validatiecontrole die de resterende paden duidelijker maakt.
Belangrijkste punten
- Een binnenste voorwaarde wordt pas gecontroleerd nadat de buitenste tak is ingegaan.
- De inspringing bepaalt bij welke
ifeenelsehoort. - Twee geneste eisen met één actie en zonder alternatieven kunnen één
and-voorwaarde worden. - Valideer het toegestane bereik voordat je een categorie toekent.
- Tegenstrijdige binnenste en buitenste eisen creëren onbereikbare code.
4.2 Lege waarden, nul en waarden als voorwaarden
Python kan een waarde rechtstreeks in een voorwaarde toetsen. De waarheidsinterpretatie bepaalt of het blok wordt uitgevoerd. Dit bespaart vergelijkingen, maar de waarheidsinterpretatie van de waarde kan verschillen van wat de tekst lijkt te zeggen.
Herken als onwaar beschouwde waarden
Voor de ingebouwde typen hier worden False, None, numerieke nul, lege strings en lege collecties als onwaar beschouwd. Getallen ongelijk aan nul en niet-lege strings of collecties worden als waar beschouwd.
| Waarde | bool(value) | Waarom |
|---|---|---|
0, 0.0 | False | Numerieke nul |
-3 | True | Getal ongelijk aan nul |
"" | False | Lege string |
" " | True | Bevat een spatie |
"0", "False", "no" | True | Niet-lege strings |
None | False | Aanduiding voor geen waarde |
[], (), {} | False | Lege collecties |
bool() zet een waarde om naar haar booleaanse waarheidswaarde. In een voorwaarde kiest if value: dezelfde tak als if bool(value):. Het verandert de opgeslagen waarde niet in een booleaanse waarde.
Controleer lege invoer zonder die verkeerd te lezen
name = input("Name: ")
if name:
print("Hello", name)
else:
print("No name entered")
Als je op Enter drukt zonder iets te typen, levert dat "" op, dus wordt het tweede blok uitgevoerd. Een naam die geheel uit spaties bestaat, is niet leeg en voldoet aan de eerste controle. if name.strip(): controleert daarentegen de tekst nadat witruimte aan de randen is verwijderd, zodat een antwoord met alleen spaties ook niet voldoet.
Een ja-neeantwoord vereist een andere vraag. if answer: wordt uitgevoerd voor "no" en "False" omdat beide tekens bevatten. Vergelijk de tekst om instemming te herkennen, bijvoorbeeld answer == "yes". Waarheidsinterpretatie controleert of een waarde leeg is, niet de betekenis van een woord.
Houd een geldige nul gescheiden van ontbrekende gegevens
Stel dat quantity gelijk is aan None voordat een waarde is opgegeven en terecht 0 mag zijn. if quantity: wijst beide af. Gebruik quantity is not None om te vragen of een waarde aanwezig is; dit accepteert nul.
Voor een echte booleaanse variabele is rechtstreeks toetsen duidelijk. Voor andere waarden doet x == True iets anders dan if x:. Met x = 5 slaagt de controle op waarheidsinterpretatie, maar is 5 == True onwaar; bij numerieke gelijkheid wordt True als gelijk aan 1 behandeld, niet aan elk getal ongelijk aan nul.
and en or geven een waarde terug die ze bekijken
Deze operatoren geven een operand terug, die niet per se een booleaanse waarde is:
| Expressie | Teruggegeven waarde |
|---|---|
"" or "Guest" | "Guest" |
"Ana" or "Guest" | "Ana" |
0 and 5 | 0 |
3 and 5 | 5 |
Bij or geeft Python de linkerwaarde terug als die als waar wordt beschouwd; anders evalueert het de rechterwaarde en geeft die terug. Bij and geeft het de linkerwaarde terug als die als onwaar wordt beschouwd; anders evalueert het de rechterwaarde en geeft die terug.
display_name = name or "Guest" levert een standaardwaarde voor lege invoer. Hetzelfde patroon met quantity or 1 vervangt een echte nul door 1. Gebruik een standaardwaarde alleen op deze manier als elke als onwaar beschouwde waarde ontbrekend betekent. not gedraagt zich anders: het geeft altijd True of False terug. Als een opgeslagen vlagvariabele booleaans moet zijn, zet has_name = bool(name or nickname) de gekozen tekst om naar een waarheidswaarde.
Belangrijkste punten
- Lege ingebouwde containers en tekst, nul,
NoneenFalseworden als onwaar beschouwd. - Niet-lege strings blijven als waar beschouwd, ook als er
"0"of"False"staat. - Gebruik
is not Noneals nul een geldige opgegeven waarde is. andenorgeven operanden terug;notgeeft altijd een booleaanse waarde terug.- Een standaardwaarde met
orvervangt elke als onwaar beschouwde linkerwaarde, inclusief nul. strip()maakt invoer met alleen spaties leeg voordat die wordt gecontroleerd.
4.3 Volg paden en test de grenzen
Een script kan zonder syntaxisfout worden uitgevoerd en toch de verkeerde tak kiezen. Bij stapsgewijs volgen doorloop je één uitvoering met de hand. Bij testen voer je gekozen invoer uit en vergelijk je het waargenomen resultaat met het resultaat dat de regel vereist.
Plan en volg een pad
Leg de keuzes voordat je code schrijft vast in stappen in gewone taal, of pseudocode. Een stroomdiagram plaatst elke voorwaarde in een ruit met pijlen voor waar en onwaar. Beide paden hebben een duidelijke volgende stap of een duidelijk einde nodig.
Om code stap voor stap te volgen, schrijf je de beginwaarden op, evalueer je elke bereikte voorwaarde, noteer je toekenningen en neem je de uitvoer exact over. Voor de cijferketen bij score = 72:
| Bereikte voorwaarde | Resultaat | Actie |
|---|---|---|
score >= 90 | False | Ga verder met de volgende controle |
score >= 80 | False | Ga verder met de volgende controle |
score >= 70 | True | Stel grade in op "C" |
| Rest van de keten | Niet geëvalueerd | Ga verder na de keten |
“Niet geëvalueerd” is iets anders dan onwaar. Python heeft al een tak gekozen en heeft de latere vergelijkingen dus niet nodig.
Test elke tak en grens
Een keten met vier takken heeft minstens vier invoeren nodig om elke tak één keer uit te voeren. Kies ze op basis van de bedoelde routes, niet op basis van hoe verschillend de getallen eruitzien. Meerdere hoge scores kunnen allemaal hetzelfde eerste blok doorlopen.
Alleen takdekking kan een verkeerde grens missen. Test voor age >= 18 de waarden 17, 18 en 19. Een onjuiste > geeft bij de twee buitenste controles het verwachte resultaat, maar wijst de exacte grens af. Vergelijk voor een beoordelingsgrens van 90 de waarden 89, 90 en 91; doe hetzelfde bij de andere drempelwaarden. Kies voor decimale invoer nabijgelegen waarden die passen bij de precisie van de meting.
Zoek takken die niet kunnen worden uitgevoerd
if score >= 60:
print("Pass")
elif score >= 90:
print("Excellent")
De tweede tak is onbereikbaar. Elke score van minstens 90 voldeed al aan de eerste voorwaarde. Zet de strengere drempelwaarde eerst of verander de bereiken zodat ze bij de bedoelde regel passen.
Een hiaat laat een bedoeld geval onafgehandeld: t < 0 gevolgd door t > 0 slaat nul over. Door een overlapping kunnen meerdere onafhankelijke acties worden uitgevoerd: de afzonderlijke controles t >= 0 en t <= 10 slagen beide voor 5. Een keten voert alleen de eerste tak met een ware voorwaarde uit, maar de volgorde bepaalt nog steeds welke overlappende voorwaarde voorrang krijgt.
Neem lastige invoer mee
Test negatieve waarden, nul, lege tekst en antwoorden met hoofdletters wanneer het script kleine letters verwacht. Als alleen "y" en "n" worden geaccepteerd, geef dan op alle andere tekst een duidelijk antwoord zoals "Please answer y or n".
Wanneer een controle zich onverwacht gedraagt, onderzoek je de waarde en het type voordat je de verdachte vergelijking evalueert:
print(repr(age), type(age))
Voor age = "18" drukt dit '18' <class 'str'> af. Zet de tekst om voordat je age >= 18 probeert; als je de foutieve vergelijking in diezelfde diagnostische print() zou plaatsen, ontstaat een TypeError voordat de diagnostische uitvoer verschijnt. Controleer bij structuurproblemen de inspringing en de syntaxisfoutmelding.
Tot slot kan een vergelijking rechtstreeks een booleaanse vlagvariabele instellen: is_adult = age >= 18. Dit vervangt twee takken die alleen True en False toekennen. Gebruik bool() wanneer de onderliggende expressie een ander soort waarde kan teruggeven.
Belangrijkste punten
- Volg alleen voorwaarden die het programma bereikt en noteer overgeslagen controles als overgeslagen.
- Test elke tak en daarnaast de grenswaarde en nabijgelegen waarden van elke grens.
- Eerdere brede controles kunnen latere takken onbereikbaar maken.
- Controleer hiaten, overlappingen en onverwachte invoer aan de hand van de bedoelde regel.
- Onderzoek de waarde en het type voordat je een vergelijking evalueert die kan mislukken.
5Kies uit gevallen met match
Menu’s en opdrachten vergelijken vaak één waarde met meerdere vaste keuzes. Een match-instructie geeft die keuzes weer als patronen en voert het eerste overeenkomende geval uit. Letterlijke waarden, alternatieven en een afsluitend jokerpatroon volstaan voor veel eenvoudige menu’s. Bindingspatronen en aanvullende voorwaarden bieden meer mogelijkheden, maar een naam in een patroon gedraagt zich anders dan een naam in een vergelijking. Als je dat onderscheid begrijpt, voorkom je dat een geval onbedoeld elke invoer accepteert.
5.1 Vaste waarden, alternatieven en een resttak
Een match-instructie, beschikbaar in Python 3.10 en later, toetst één waarde aan een reeks patronen. Die waarde is de te toetsen waarde. Elke case bevat een patroon en een ingesprongen blok.
Volg het eerste overeenkomende geval
command = "stop"
match command:
case "start":
print("Starting")
case "stop":
print("Stopping")
case _:
print("Unknown command")
print("Ready")
De te toetsen waarde is "stop". Die komt niet overeen met "start", dus probeert Python het volgende geval. "stop" komt overeen en het blok drukt Stopping af. Python verlaat dan de hele match-instructie en drukt Ready af. Slechts één gevalblok wordt uitgevoerd; de uitvoering loopt niet door naar het volgende blok en er is geen break nodig.
De te toetsen waarde "jump" bereikt het afsluitende jokerpatroon, _, dat elke waarde accepteert. De uitvoer is Unknown command en daarna Ready. Zonder dat geval wordt bij een waarde die niet overeenkomt gewoon geen gevalblok uitgevoerd en gaat de uitvoering verder na de instructie.
Houd de indeling en resttak op volgorde
De case-koppen springen 4 spaties in onder match en hun blokken nog eens 4 spaties. Elke kop eindigt met een dubbele punt. Een case _: zonder aanvullende voorwaarde moet als laatste komen, omdat die alles accepteert. Als je er meer gevallen achter zet, ontstaat een SyntaxError: die latere patronen kunnen nooit worden bereikt.
Een jokerpatroon met een aanvullende voorwaarde mag eerder staan, omdat niet aan die extra voorwaarde hoeft te zijn voldaan. Een match-instructie in een script dat achtereenvolgens wordt uitgevoerd, kan ook geen break bevatten; die instructie vereist een omvattende lus.
Begrijp hoe letterlijke waarden overeenkomen
Een patroon met een letterlijke waarde gebruikt een vast getal, een vaste string, True, False of None. Stringpatronen zijn exact en hoofdlettergevoelig: "stop" komt niet overeen met "Stop". Numerieke patronen gebruiken gelijkheid, dus case 1: komt overeen met 1, 1.0 en True, dat gelijk is aan 1.
De patronen True, False en None gebruiken daarentegen identiteit. Daarom komt case True: overeen met de booleaanse waarde True, maar niet met het gehele getal 1. De volgorde van patronen is belangrijk als zowel een numeriek als een booleaans geval de te toetsen waarde zou kunnen accepteren.
Verbind vaste alternatieven met een verticale streep
Een of-patroon verbindt alternatieven met |:
day = int(input("Day number: "))
match day:
case 6 | 7:
print("Weekend")
case 1 | 2 | 3 | 4 | 5:
print("Weekday")
case _:
print("Not a day number")
Voor 6 wordt het eerste blok uitgevoerd; voor 3 het tweede; voor 9 het jokerpatroon. Zonder int() blijft de ingetypte "6" een string en komt die niet overeen met het getal 6.
Gebruik het patroonscheidingsteken |, niet het booleaanse woord or. case "y" or "yes": is ongeldig; case "y" | "yes": is geldig.
| Keuze | Duidelijke eerste keuze |
|---|---|
| Eén te toetsen waarde vergelijken met veel vaste waarden | match |
Bereiken zoals score >= 90 | if–elif |
| Voorwaarden met verschillende variabelen | if–elif |
Voor vaste opdrachten kan een if–elif-keten op basis van gelijkheid dezelfde uitvoer opleveren. Kies de indeling waarin de gevallen het gemakkelijkst te lezen zijn.
Belangrijkste punten
matchvereist Python 3.10 of later en voert alleen het eerste overeenkomende geval uit.- Een jokerpatroon
_zonder aanvullende voorwaarde accepteert alles en moet als laatste komen. - Gebruik
|om alternatieve patronen te verbinden. - Letterlijke strings en getallen komen overeen op basis van gelijkheid; patronen met
True,FalseenNonegebruiken identiteit. - Zonder resttak wordt bij een te toetsen waarde die niet overeenkomt geen blok uitgevoerd.
- Gebruik
matchvoor vaste keuzes enif–elifvoor gewone bereikcontroles.
5.2 Bindingspatronen, aanvullende voorwaarden en benoemde waarden
Patronen kunnen meer dan een vaste letterlijke waarde controleren. Een patroon kan de te toetsen waarde een naam geven en een aanvullende voorwaarde kan een extra eis controleren voordat het geval wordt geaccepteerd.
Bind eerst de waarde en controleer daarna de aanvullende voorwaarde
Een bindingspatroon is een losse naam zoals n. Het accepteert elke te toetsen waarde en kent die toe aan de naam. Een aanvullende voorwaarde volgt op het patroon met if condition; het blok wordt alleen uitgevoerd als het patroon overeenkomt en de aanvullende voorwaarde waar is.
temperature = -5
match temperature:
case 0:
print("Exactly freezing")
case t if t < 0:
print("Below freezing by", -t, "degrees")
case _:
print("Above freezing")
Bij -5 komt de eerste letterlijke waarde niet overeen. Het volgende patroon bindt -5 aan t en controleert daarna t < 0. De aanvullende voorwaarde is waar, dus is de uitvoer Below freezing by 5 degrees.
Bij 0 wordt het geval met de letterlijke waarde gekozen voordat het bindingspatroon wordt geprobeerd. Bij 12 slaagt het bindingspatroon, maar is de aanvullende voorwaarde onwaar, dus probeert Python het jokerpatroon en drukt Above freezing af. Een onware aanvullende voorwaarde beëindigt het zoeken naar een geval niet.
Een losse naam zoekt geen constante op
Stel dat QUIT = "q". Het is verleidelijk om case QUIT: te schrijven om te controleren of de te toetsen waarde gelijk is aan die waarde. Maar een losse naam is altijd een bindingspatroon, ook als die uit hoofdletters bestaat. Het geval accepteert elke te toetsen waarde en overschrijft QUIT daarmee.
Als er meer gevallen volgen op een bindingspatroon zonder aanvullende voorwaarde, meldt Python een syntaxisfout omdat het bindingspatroon die gevallen onbereikbaar maakt. Als het bindingspatroon als laatste staat, kan de fout ongemerkt worden uitgevoerd. Vergelijk expliciet met een aanvullende voorwaarde:
QUIT = "q"
key = "x"
match key:
case k if k == QUIT:
print("Quit")
case _:
print("Keep working")
Hier bindt k de waarde "x". De aanvullende voorwaarde vergelijkt die met de bestaande "q", is onwaar en laat het jokerpatroon Keep working afdrukken. Een letterlijke case "q": is eenvoudiger als de vaste waarde rechtstreeks kan worden geschreven.
Herken een waardepatroon met een punt
Een naam met een punt zoals math.pi is een waardepatroon, geen bindingspatroon. Het zoekt een bestaande waarde op en vergelijkt de te toetsen waarde daarmee met ==. Benoemde constanten uit modules of klassen kunnen deze vorm gebruiken. Het onderscheid zit in de punt: case n: kent een waarde toe aan een naam; een patroon met een punt controleert een bestaande waarde.
Geef een specifieke overeenkomst een naam met as
answer = "y"
match answer:
case "y" | "yes" as accepted:
print("Accepted:", accepted)
case _:
print("Please answer y or yes")
Het of-patroon controleert de toegestane strings en as slaat de overeenkomende te toetsen waarde op in accepted. Voor "y" is de uitvoer Accepted: y. Het vervangt de invoer niet door een standaardwoord: "yes" zou "yes" opslaan. "Yes" komt met geen van beide strings overeen, omdat hoofdletters nog steeds van belang zijn.
Een of twee aanvullende voorwaarden kunnen goed tussen vaste gevallen passen. Wanneer bijna elk geval een bereikcontrole is of verschillende variabelen gebruikt, is een if–elif-keten meestal duidelijker. Beide structuren hebben een afsluitende resttak nodig als elke invoer een antwoord moet krijgen.
Belangrijkste punten
- Een patroon met een losse naam bindt de te toetsen waarde, ook als die naam al een waarde heeft.
- Een aanvullende voorwaarde wordt gecontroleerd nadat een patroon overeenkomt; bij een onware voorwaarde kunnen latere gevallen worden geprobeerd.
- Een waardepatroon met een punt vergelijkt met een bestaande waarde.
asgeeft de te toetsen waarde die door een specifieker patroon is geaccepteerd een naam.- Gebruik een letterlijke waarde of een vergelijking met een aanvullende voorwaarde om te voorkomen dat een constantenaam onbedoeld een waarde bindt.
If-instructies in Python: voorbeelden
1Zet waarden om in betrouwbare vergelijkingen
13 stappen
- 1IntroductieEen opslaggrens vereist een exacte controle
Een opslagkluis accepteert pakketten met een gewicht van 1 tot en met 8 kilogram, inclusief beide grenzen. Voordat het programma een actie kiest, moet het die regel omzetten in een ja-neeantwoord, een booleaanse waarde die door een vergelijking wordt opgeleverd, zodat elke latere beslissing op een exacte test berust.
Begin met afzonderlijke vergelijkingen en combineer daarna de twee grenzen tot een bereik. Controleer onderweg of een waarde een getal is of alleen tekst die op een getal lijkt.
- 2UitlegEen vergelijking levert een booleaanse waarde op
Met
weight = 8is de expressieweight < 8gelijk aanFalse: acht is niet kleiner dan zichzelf. De expressieweight <= 8isTrue, omdat gelijkheid meetelt.Beide resultaten hebben het type
bool. SchrijfTrueenFalsemet hoofdletters en zonder aanhalingstekens. Tekst zoals"True"is een string en een niet-gedefinieerdetruemet een kleine letter veroorzaakt eenNameErrorin plaats van een booleaanse waarde op te leveren. - 3VoorbeeldSla het resultaat op zonder het gewicht te veranderen
weight = 8 fits_upper_limit = weight <= 8 print(weight, fits_upper_limit)Eerst wordt
8 <= 8geëvalueerd totTrue. De toekenning slaat die booleaanse waarde op infits_upper_limit; het oorspronkelijke gewicht blijft ongewijzigd. De uitvoer is8 True.De enkele
=voert de toekenning uit. De vergelijking gebruikt<=; gebruik==voor een vraag over gelijke waarden. - 4UitdagingWerkt een vergelijking de waarde bij?
Voorspel de uitvoer:
weight = 6 weight == 8 print(weight)---reveal---
Het programma drukt
6af. De middelste regel vergelijkt het huidige gewicht met 8, maar kent nooit een vervangende waarde toe. In een script wordt het onware resultaat niet gebruikt. Een enkele toekenningweight = 8zou de uiteindelijke uitvoer veranderen in8. - 5VerbandEen berekening kan de te vergelijken waarde leveren
Een controle voor gehele getallen kan een rekenkundig resultaat vergelijken:
n % 2 == 0bepaalt eerst de rest na deling door 2 en controleert daarna of die gelijk is aan nul.Voor
n = -9is de rest1, dus is de controle onwaar. De rest in Python met positieve deler 2 is1voor oneven gehele getallen, ook als het oorspronkelijke gehele getal negatief is. De rest vergelijken met1controleert of het getal oneven is. - 6TipBerekende zwevendekommagetallen kunnen iets verschillen
0.1 + 0.2wordt opgeslagen als0.30000000000000004, dus mislukt de controle of de som exact gelijk is aan0.3.Een controle met een tolerantie stelt een andere vraag:
abs((0.1 + 0.2) - 0.3) < 1e-9controleert of de afstand kleiner is dan een miljardste.abs()verwijdert het teken van het verschil. Deze controle is waar; ze accepteert een kleine afwijking in plaats van exacte gelijkheid te stellen. - 7VoorbeeldIngetypte cijfers zijn aanvankelijk tekst
weight = input("Weight in kilograms: ")Als de gebruiker
8intypt, bevat de variabele"8". De vergelijkingweight <= 8veroorzaakt eenTypeError, omdat ze een string en een geheel getal op volgorde probeert te vergelijken.Lees een decimale meting met
weight = float(input("Weight in kilograms: ")). Dezelfde ingetypte cijfers leveren nu8.0op, dat numeriek met8kan worden vergeleken. - 8UitlegStrings volgen tekens vanaf links
De volgorde van tekst is gebaseerd op Unicodecodepunten.
"18" < "8"is waar omdat het eerste ongelijke paar"1"en"8"is; Python behandelt die strings niet als achttien en acht.Hoofdletters, kleine letters en spaties zijn ook van belang.
"ready" == "Ready"is onwaar. Als jeanswer.strip().lower()met"ready"vergelijkt, verwijder je witruimte aan de randen en normaliseer je het hoofdlettergebruik vóór de gelijkheidscontrole. - 9UitdagingControleer wat lidmaatschap werkelijk vraagt
Evalueer deze twee controles:
"box" in "mailbox" "Box" in "mailbox"---reveal---
De eerste is
Trueen de tweede isFalse. Een lidmaatschapscontrole zoekt naar de exacte deelstring, inclusief hoofdlettergebruik. De letters"box"komen samen voor aan het einde van"mailbox"; de hoofdletter"B"komt daar niet voor.not inzou elk resultaat omkeren. - 10VoorbeeldControleer beide grenzen van de kluisregel
weight = 8 fits_locker = 1 <= weight <= 8 print(fits_locker)De keten controleert
1 <= 8en8 <= 8. Beide slagen, dus is het resultaatTrue. Bijweight = 0.5slaagt de onderste controle niet; bij8.5slaagt de bovenste controle niet.Elke aangrenzende vergelijking in een keten moet slagen. Als je een van beide
<=-operatoren vervangt door<, sluit je dat eindpunt uit. - 11KernpuntOntbrekende gegevens zijn een andere vraag
Nonebetekent dat er geen waarde aanwezig is. Controleer dit metweight is Noneofweight is not None.De operator
isvraagt of referenties hetzelfde object aanduiden. Numerieke gelijkheid gebruikt==, dus vervangweight == 8niet doorweight is 8. Waarden kunnen gelijk zijn zonder hetzelfde object te zijn en een identiteitsvergelijking met een letterlijke numerieke waarde geeft een waarschuwing. - 12UitdagingCombineer omzetting met een grenscontrole
Een script voert
weight = float(input("Weight: "))uit en de gebruiker typt"8.5". Wat geeft1 <= weight <= 8terug en wijst de omzetting zelf de invoer af?---reveal---
Het geeft
Falseterug omdat8.5 <= 8niet slaagt. De omzetting slaagt: 8,5 is een geldig zwevendekommagetal. Tekst omzetten levert een numeriek type op; de bereikcontrole bepaalt afzonderlijk of dat getal is toegestaan. - 13SamenvattingDrie vragen om uit elkaar te houden
Kies de operator die bij de grens past, bepaal het type van de waarde en volg daarna de vergelijking stap voor stap.
Een numerieke vergelijking van de volgorde vereist numerieke waarden. Stringcontroles behouden exacte tekens, tenzij je de tekst opschoont. Een bereik heeft beide grenzen nodig, lidmaatschap vraagt naar een deelstring en identiteit is het juiste middel om
Nonete controleren.
2Volg een bezorgkeuze door de takken
14 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieVan een regel naar een pad door code
- 2VoorbeeldEen waarschuwing die kan worden overgeslagen
- 3TipHerstel de structuur voordat je resultaten interpreteert
- 4UitdagingVerplaats de laatste regel naar het blok
- 5VoorbeeldGeef het pad voor onwaar een actie
- 6KernpuntElse betekent alle afgewezen invoer
- 7VoorbeeldKies alleen het tarief in één expressie
- 8UitdagingLees de waarden rond de voorwaarde
- 9VoorbeeldStel drie servicecategorieën op
- 10VoorbeeldGebruik de eerdere mislukte controle om het bereik te beperken
- 11UitdagingVerander de volgorde van overlappende controles
- 12VerbandEen nieuwe if is een nieuwe keuze
- 13UitdagingBepaal zowel de aanduiding als het tarief
- 14SamenvattingStem de structuur af op de keuze
3Bouw en bescherm een gecombineerde voorwaarde
13 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieMeerdere feiten kunnen één actie aansturen
- 2UitlegVereis beide feiten met and
- 3VoorbeeldSta elk van beide betaalmogelijkheden toe met or
- 4UitdagingKies een rij die voldoet
- 5TipGeef elke vergelijking eigen operanden
- 6VoorbeeldPlaats alternatieven binnen de gezamenlijke eis
- 7KernpuntGroepering is niet de uitvoeringsvolgorde
- 8VoorbeeldZet een beschermende voorwaarde vóór een gemiddelde
- 9UitdagingWelk werk wordt bereikt?
- 10UitlegEen bereik ontkennen verandert het verbindingswoord
- 11UitdagingBehoud de inbegrepen eindpunten
- 12UitdagingVertaal twee eisen en één uitsluiting
- 13SamenvattingLees de betekenis, de groepering en daarna het bereikte werk
4Valideer, classificeer en test een bezorgaanvraag
16 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieElke invoer heeft het bedoelde pad nodig
- 2VoorbeeldValideer voordat je een service kiest
- 3VoorbeeldVolg het binnenste pad
- 4UitdagingBepaal bij welke instructie else hoort
- 5VerbandVerminder de nesting bij één gezamenlijke actie
- 6UitlegNul en ontbrekend worden beide als onwaar beschouwd
- 7VoorbeeldTekst die ontkennend lijkt kan toch voldoen
- 8UitdagingBehoud een werkelijke nul
- 9KernpuntEen operator kan tekst kiezen
- 10VoorbeeldLeg een pad vast zonder controles te verzinnen
- 11TipKies tests voor paden en grenzen
- 12UitdagingEen brede voorwaarde verbergt een latere tak
- 13VerbandZoek naar hiaten en onbedoelde overlappingen
- 14TipOnderzoek de waarde vóór een riskante vergelijking
- 15UitdagingTest een herstelde keuze volledig
- 16SamenvattingGeef waarden en tests een duidelijk doel
5Toets opdrachten met match en voeg gevallen met aanvullende voorwaarden toe
15 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieEén te toetsen waarde, meerdere mogelijke gevallen
- 2VoorbeeldStel het opdrachtmenu op
- 3KernpuntHet volgende geval wordt niet automatisch uitgevoerd
- 4VoorbeeldGebruik één blok voor twee exacte opdrachten
- 5UitdagingPlaats de terugvalmogelijkheid waar die kan helpen
- 6TipControleer het gedrag van numerieke en booleaanse patronen
- 7UitlegEen losse naam bindt elke te toetsen waarde
- 8VoorbeeldVoeg een aanvullende voorwaarde toe aan de gebonden waarde
- 9UitdagingGa verder na een onware aanvullende voorwaarde
- 10VoorbeeldEen naam in hoofdletters bindt nog steeds
- 11VerbandEen punt verandert het opzoekgedrag
- 12VoorbeeldGeef een overeenkomend letterlijk alternatief een naam
- 13UitdagingKies een menustructuur voor de taak
- 14UitdagingBehoud een vaste naam en sta een terugvalmogelijkheid toe
- 15SamenvattingLees patronen voordat je gevalblokken leest
If-instructies in Python: oefenvragen
Set 1: Pas regels toe en onderzoek verkeerde takken10 Oefenvragen
Vraag 1 van 10
Welke booleaanse waarde wordt opgeslagen in is_odd?
n = -13
is_odd = n % 2 == 1
Toon antwoordVerberg antwoord
True opgeslagen. Een rest van -1 zou een andere tekenregel gebruiken dan de regel van Python voor % met een positieve deler.Vraag 2 van 10
level = input("Level: "). De gebruiker typt 16. Wat gebeurt er wanneer het programma vervolgens level < 20 evalueert?Toon antwoordVerberg antwoord
input() slaat de tekst "16" op, niet het gehele getal 16. Python kan een string en een geheel getal niet op volgorde vergelijken, dus veroorzaakt de vergelijking een TypeError. Na een omzetting met int() zou ze waar zijn, maar de getoonde code heeft die omzetting niet uitgevoerd.Vraag 3 van 10
Toon antwoordVerberg antwoord
pass is de speciale instructie van Python die geen actie uitvoert en geeft een nog niet ingevulde tak dus een geldig ingesprongen blok. Een else begint een alternatieve clausule en kan niet als dat blok dienen. De tak heeft nog steeds een instructie nodig, ook als de voorwaarde onwaar zou zijn.Vraag 4 van 10
Wat is de eindwaarde van label?
points = 37
if points >= 30:
label = "High"
if points >= 10:
label = "Middle"
else:
label = "Low"
Toon antwoordVerberg antwoord
if kent "High" toe, maar daarna bereikt de uitvoering de tweede if. Ook die voorwaarde is waar, dus overschrijft die label met "Middle" en slaat de bijbehorende else over. Als "High" behouden zou blijven, zou de tweede if ten onrechte worden behandeld als een elif in de eerste keuze.Vraag 5 van 10
is_open and not is_full waar?Toon antwoordVerberg antwoord
is_open waar zijn en voor de ontkende tweede eis moet is_full onwaar zijn. Als beide invoerwaarden waar zijn, wordt not is_full onwaar en slaagt de gecombineerde voorwaarde niet. Alleen ruimte hebben voldoet evenmin aan de eis dat de locatie open is.Vraag 6 van 10
Toon antwoordVerberg antwoord
and eerst en kan een tegoedbon alleen de expressie waar maken, zelfs op een dag die geen werkdag is. De versie met or voor de werkdag accepteert ook dagen die niet aan de genoemde eis voldoen.Vraag 7 van 10
Wat wordt afgedrukt?
is_open = False
has_booking = True
if is_open:
if has_booking:
print("Enter")
else:
print("Book first")
else:
print("Closed")
Toon antwoordVerberg antwoord
else. De buitenste else, op hetzelfde inspringniveau als if is_open:, drukt Closed af. De keuze voor Enter zou een binnenste voorwaarde controleren waarvan Python de omvattende tak nooit ingaat.Vraag 8 van 10
"" or "Reader" terug?Toon antwoordVerberg antwoord
or de rechteroperand "Reader" en geeft die terug. Dit resultaat is een string, geen booleaanse waarde. Als True zou worden teruggegeven, zou de waarheidswaarde waarmee een operand wordt gekozen worden verward met de operand die de expressie daadwerkelijk teruggeeft.Vraag 9 van 10
"edit" als de string "change" in één blok terechtkomen?Toon antwoordVerberg antwoord
|, zodat elk van beide exacte strings met het geval kan overeenkomen. Het booleaanse woord or is geen geldig patroonscheidingsteken. Een gevalkop beschrijft patronen waarmee een waarde moet overeenkomen, dus kan gewone syntaxis voor booleaanse expressies hier niet worden gebruikt.Vraag 10 van 10
Wat wordt afgedrukt?
value = 11
match value:
case n if n < 0:
print("Negative", n)
case n if n % 2 == 0:
print("Even", n)
case _:
print("Other")
Toon antwoordVerberg antwoord
Other af; een geslaagd bindingspatroon alleen kiest geen blok als de aanvullende voorwaarde onwaar is.Set 2: Volg waarden door meerdere keuzes10 Oefenvragen
Sla deze les op om elk antwoord te zien en elke set te oefenen.
Vraag 1 van 10
a = 0.1 + 0.2 en een streefwaarde is b = 0.3. De controle moet verschillen kleiner dan 1e-8 accepteren. Welke controle doet dat?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
Wat wordt afgedrukt?
remaining = 4
if remaining > 0:
remaining = 0
if remaining == 0:
print("Empty")
print(remaining)
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
Welke waarde wordt toegekend aan label?
has_booking = True
label = "Reserved" if has_booking else "Open"
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
Wat gebeurt er wanneer deze expressie wordt geëvalueerd?
is_admin = True
count = 0
total = 18
is_admin or count != 0 and total / count > 6
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
Wat wordt afgedrukt en waarom?
has_badge = True
is_active = False
if has_badge:
if is_active:
print("Enter")
else:
print("Get a badge")
print("Checked")
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
None betekent dat er geen aantal is opgegeven. Welke toekenning gebruikt alleen voor ontbrekende gegevens de standaardwaarde 9?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
Deze indeling van gehele getallen moet voor elk geheel getal precies één aanduiding voor het teken afdrukken. Welke invoer laat een ontbrekend geval zien?
if balance < 0:
print("Negative")
elif balance > 0:
print("Positive")
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
Wat wordt afgedrukt?
reply = "later"
match reply:
case "now" | "later" as chosen:
print(chosen)
case _:
print("Unknown")
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
not (-4 <= reading <= 9)?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
Wat gebeurt er met EXIT?
EXIT = "x"
key = "z"
match key:
case EXIT:
print(EXIT)
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Set 3: Lees vergelijkingen en volg keuzes10 Oefenvragen
Sla deze les op om elk antwoord te zien en elke set te oefenen.
Vraag 1 van 10
Welke waarde wordt toegekend aan fee?
has_pass = False
fee = 2 if has_pass else 7
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
weight precies de toegestane gewichten?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
"14" < "7"?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
Wat wordt afgedrukt?
stock = 0
if stock > 0:
print("Available")
print("Checked")
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
Wat wordt afgedrukt?
points = 46
if points >= 50:
print("Gold")
elif points >= 30:
print("Silver")
elif points >= 10:
print("Bronze")
else:
print("Starter")
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
total en items moet een vlagvariabele alleen waar zijn als een gemiddelde hoger is dan 8. Nul elementen moet onwaar opleveren zonder een deling te proberen. Welke expressie voert beide eisen uit?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
bool("no") terug?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
visits van minstens 24 accepteren. Een programmeur schreef visits > 24. Welke invoer legt het onjuiste resultaat het directst bloot?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
Wat wordt afgedrukt?
mode = "SAVE"
match mode:
case "save" | "write":
print("Stored")
case _:
print("Unknown")
print("End")
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Set 4: Herstel en test gecombineerde keuzeregels10 Oefenvragen
Sla deze les op om elk antwoord te zien en elke set te oefenen.
Vraag 1 van 10
"go" ondanks witruimte aan de randen en verschillen in hoofdlettergebruik. Ze moet "gopher" en "stop" afwijzen. Welke voorwaarde doet dit?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
Wat wordt afgedrukt?
units = 0
amount = 15
result = amount / units if units != 0 else "No units"
print(result)
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
"High" voor minstens 70 punten, "Mid" voor 35 tot en met 69 en "Low" onder 35. De controles gebruiken >= in één keten. Welke volgorde van takken en aanduidingen voert de regel uit?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
wired en wireless, beschikbaar is en er geen onderhoud plaatsvindt. Welke voorwaarde voert de hele regel uit?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
"High"; andere geldige scores krijgen "Low"; ongeldige scores krijgen "Invalid". Een script deelt in met if score >= 9: en else:, maar valideert het bereik nooit. Welke structuur herstelt dit voor elke gehele score?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
Welke waarde wordt opgeslagen in chosen?
preferred = ""
alternate = "Morgan"
chosen = preferred or alternate or "Visitor"
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
Voor gehele scores moet een indeling "Top" gebruiken voor minstens 80, "Pass" voor 40 tot en met 79 en "Retry" onder 40. Welke testinvoer legt een fout in deze code bloot?
if score >= 40:
print("Pass")
elif score >= 80:
print("Top")
else:
print("Retry")
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
Wat wordt afgedrukt?
value = True
match value:
case 1:
print("Number case")
case True:
print("Boolean case")
case _:
print("Other case")
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
case n ___ n > 4: in?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Kom je niet uit je eigen opgave? Huiswerkhulp
Kernbegrippen
A
aaneengeschakelde vergelijking
2 <= level <= 9 omvat 2 en 9, maar wijst een niveau van 10 af.aanvullende voorwaarde bij een patroon
if-voorwaarde na een patroon waaraan moet zijn voldaan voordat het blok wordt uitgevoerd; bij een onware voorwaarde kunnen latere gevallen worden geprobeerd.case n if n < 0: controleert het gebonden getal voordat het negatieve geval wordt gekozen.als onwaar beschouwde waarde
None, False, lege tekst en lege ingebouwde collecties.quantity or 1 de standaardwaarde kiezen, ook als nul bewust is ingevoerd.als waar beschouwde waarde
"False" slaagt voor if answer: omdat de tekens de string niet leeg maken.as-patroon
case "y" | "yes" as reply: slaat "y" op wanneer die string wordt opgegeven.B
beschermende voorwaarde
count != 0 vóór de deling in count != 0 and total / count > 10.bindingspatroon
case STOP: overschrijft STOP; hoofdletters maken er geen opzoeking van.booleaanse operator
and, or en not met kleine letters.has_ticket and is_open tot één controle.booleaanse waarde
True en False, die Python gebruikt om het resultaat van een ja-neecontrole uit te drukken.is_ready = count >= 4 wordt opgeslagen, is True wanneer count gelijk is aan 4.buitenste voorwaarde
has_ticket onwaar is, wordt de binnenste leeftijdsvergelijking overgeslagen.C
codeblok
print() onder een temperatuurcontrole staan in het codeblok dat door de controle wordt aangestuurd.conjunctie
and verbonden voorwaarde die alleen slaagt wanneer aan beide eisen is voldaan, zoals de twee grenzen van een bereik.age >= 13 and age <= 19 wijst leeftijden aan beide kanten van het tienerbereik af.D
drempelwaarde
score >= 90 is.E
elif-clausule
if-keten en wordt pas bekeken nadat alle eerdere voorwaarden niet zijn geslaagd.else-tak
if onwaar is; de kop else: heeft geen voorwaarde.if-controle op even getallen wordt de else-tak uitgevoerd voor -7, omdat de rest niet nul is.equivalente voorwaarden
not (age >= 18) en age < 18 komen voor elke gehele leeftijd overeen.G
geneste voorwaardelijke instructie
grenswaardetest
age >= 18.H
hoofdlettergevoelige vergelijking
"Yes" af wanneer de exact vereiste tekst "yes" is.I
identiteitscontrole
is of is not om te controleren of referenties hetzelfde object aanduiden, vaak om None te herkennen.result is None maakt onderscheid tussen een ontbrekend resultaat en een werkelijke waarde nul.if-instructie
if stock > 0: slaat het bijbehorende blok over wanneer stock nul is.inclusieve grens
<= of >= wordt uitgedrukt.age >= 18 slaagt iemand van precies 18 jaar voor de controle.inclusieve of
or van Python volgt deze betekenis.is_member or has_coupon ook wanneer zowel een lidmaatschap als een kortingsbon aanwezig is.inspringing
print("Done") binnen een if-blok één inspringniveau verwijdert, wordt die regel na de hele beslissing uitgevoerd.invoervalidatie
0 <= score <= 100 wijst 150 af voordat een beoordeling kan worden toegekend.J
jokerpatroon
_, dat elke te toetsen waarde accepteert zonder die een naam te geven; een jokergeval zonder aanvullende voorwaarde moet als laatste staan."Unknown command" af wanneer eerdere vaste opdrachtpatronen niet slagen.K
kortsluitevaluatie
total / count over na een onware controle count != 0 die ermee is verbonden door and.L
lidmaatschapsoperator
in en not in op exacte deelstrings."rain" in "raincoat" vindt de tekst en geeft True terug.M
match-instructie
"stop" slaat case "start": over en voert het blok onder case "stop": uit.O
of-patroon
| en slaagt wanneer een van de alternatieven overeenkomt; ze delen één gevalblok.case "open" | "load": voert voor elk van beide opdrachtstrings hetzelfde blok uit.onbereikbare tak
elif score >= 90: volgt op de bredere if score >= 60:.operand
and en or geven een van hun operanden terug in plaats van altijd een booleaanse waarde."" or "Guest" wordt als onwaar beschouwd, dus geeft de expressie de rechteroperand terug.operatorprioriteit
and vóór or wordt gegroepeerd.A or B and C gelezen als A or (B and C), tenzij haakjes dat veranderen.P
pass-instructie
if-blok geldig zonder uitvoer te produceren.patroon met een letterlijke waarde
None; letterlijke getallen en strings worden op gelijkheid vergeleken.case 6: accepteert het getal 6, maar wijst de tekst "6" af die door invoer wordt teruggegeven.pseudocode
R
regel van de eerste overeenkomst
>= 60 als die brede controle eerst staat.resttak
else in een voorwaardelijke instructie met meerdere mogelijkheden."Unknown option" afdrukken voor menu-invoer anders dan "1" of "2".S
standaardwaarde
or-expressie wordt gekozen."Guest" wordt gekozen in name or "Guest" wanneer name de lege string is.stroomdiagram
T
takdekking
te toetsen waarde
match in de kop.match command: is de huidige waarde van command de te toetsen waarde die voor elke poging wordt gebruikt.toekenning
= een waarde op onder een variabelenaam en vervangt een eventuele waarde die al aan die naam is gekoppeld.score = 28 verandert score; score == 28 schrijven vergelijkt alleen de huidige waarde.tolerantie
1e-9 accepteert abs(a - b) < 1e-9 een klein verschil tussen berekende zwevendekommagetallen.tweevoudige keuze
if en else precies één van twee paden, met voor elke waarheidswaarde een blok om uit te voeren.typeconversie
int() om te zetten naar een geheel getal voordat grootten worden vergeleken.level = int(input("Level: ")) maakt een numerieke grenscontrole mogelijk.U
uitvoeringstabel
Unicodecodepunt
"Z" is kleiner dan dat voor "a", dus is "Zebra" < "apple" waar.V
vergelijkingsoperator
<= doet wanneer een grens meetelt.weight <= 8 accepteert een gewicht van precies 8 kilogram.verminderen van nestingsniveaus
and-voorwaarde.voorwaardelijke expressie
a if condition else b en evalueert alleen de gekozen waarde.fee = 0 if has_pass else 4 slaat 4 op wanneer de pas ontbreekt.W
waardepatroon
math.pi vergelijkt met een bestaande modulewaarde in plaats van een waarde aan een losse naam toe te kennen.waarheidsinterpretatie
if name: een leeg antwoord afwijzen zonder expliciete vergelijking met "".waarheidstabel
wetten van De Morgan
and en or te verwisselen, met behoud van de waarheidswaarde.not (A or B) in not A and not B, waarbij beide delen worden ontkend.Over deze les
Door StudeliFout melden
Maak je eigen Studiemateriaal
Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.