Controleer de leeftijd
Toon op regel 1 of age minstens zestien is. Bewaar dat in old_enough.
Een apparaat kan draadloos werken als de batterij voldoende geladen is én de verbinding klaarstaat. Met een kabel kan het ook zonder die draadloze route werken. Zulke regels worden duidelijker wanneer je iedere deelvraag een naam geeft voordat je het uiteindelijke antwoord berekent.
Je kent and, or en not al uit de basismodule. Met booleaanse waarden eist and dat beide voorwaarden waar zijn, terwijl or minstens één ware voorwaarde vraagt. not keert het uiteindelijke antwoord om.
Een tussenvoorwaarde is hier een benoemd antwoord op een deelvraag. Je kunt bijvoorbeeld eerst vastleggen of de batterij voldoende is, en daarna of de draadloze route beschikbaar is. Dat maakt het makkelijker om te ontdekken waarom de volledige regel slaagt of faalt.
Je hoeft hiervoor geen nieuwe if-keuze te schrijven. Een vergelijking of combinatie levert zelf al een boolean op, die je direct kunt bewaren en afdrukken. Een if wordt pas nodig wanneer je op basis van dat antwoord verschillende opdrachten wilt uitvoeren.
Het apparaat in dit voorbeeld heeft weinig batterij en is niet gekoppeld, maar er zit wel een kabel in. Voorspel welke antwoorden onwaar blijven en waarom het apparaat uiteindelijk toch klaarstaat.
charge = 10
paired = False
cable = True
enough = charge >= 20
print(enough)
wireless = enough and paired
print(wireless)
ready = wireless or cable
print(ready)
print(not ready)False False True False
De eerste twee antwoorden zijn onwaar: de batterij voldoet niet en daarmee ontbreekt de draadloze route. De kabel maakt de laatste combinatie alsnog waar. De weigering is vervolgens onwaar, omdat die de uitkomst van de volledige regel omkeert.
Door de tussenstappen afzonderlijk te tonen zie je welk deel van je redenering werkt. Dat helpt bij het herstellen van een fout: je hoeft niet in één keer de hele uitdrukking te begrijpen. In de opdracht krijgen de deelvragen daarom ook eigen namen.
Zonder haakjes kun je per ongeluk alleen het eerste onderdeel omkeren. Het volgende voorbeeld toont twee verschillende vragen.
wireless = False
cable = True
print(not wireless or cable)
print(not (wireless or cable))True False
De eerste regel betekent: de draadloze route ontbreekt, óf de kabel is aanwezig. Dat is waar, maar het is niet de vraag of het apparaat helemaal niet kan werken. De tweede regel rekent eerst de volledige combinatie tussen haakjes uit en keert daarna dat antwoord om.
Je kunt die tweede schrijfwijze nog duidelijker maken door de combinatie eerst als ready te bewaren en daarna not ready te gebruiken. Benoemde tussenstappen verkleinen de kans dat je slechts een deel van de regel ontkent. Kies namen die vertellen welke vraag het antwoord vertegenwoordigt.
De testinvoer bevat ook ja en nee. Met gelijkheid, geschreven als ==, vergelijk je twee waarden: input() == "ja" levert True op wanneer de ingelezen tekst precies ja is. Eén = is een toekenning; twee == stellen een vraag.
De fictieve toegangsregel accepteert iemand van minstens zestien met toestemming, óf een lid. De invoerregels staan klaar; controleer met de vier uitvoerregels ieder onderdeel van de regel. De tests wisselen leeftijd, toestemming en lidmaatschap af.
Je programma krijgt deze invoer automatisch. Elke variant begint opnieuw. Alle varianten moeten kloppen.
15 ja nee
16 ja nee
15 nee ja
16 nee nee
Toon op regel 1 of age minstens zestien is. Bewaar dat in old_enough.
Maak supervised waar als zowel old_enough als consent waar is. Toon dit op regel 2.
Maak allowed waar als supervised of member waar is. Toon dit op regel 3.
Toon op regel 4 of toegang geweigerd wordt door allowed om te keren.
not op het volledige antwoord dat je wilt omkeren.== vergelijkt waarden; = kent een waarde toe.Hierna laat je Python dezelfde handeling voor meerdere getallen uitvoeren met een lus.
Voer je code uit en ontdek
wat je hebt gemaakt.
Je hoeft het niet in één keer goed te doen. Na het uitvoeren zie je hier welke stappen al kloppen.