Uit de cursus: Basisbeginselen van programmeren: voorbeelden uit de echte wereld

Als/anders-als ketens

- Elke programmeertaal heeft een vorm van de klassieke als-dan-anders-uitspraak. Elke taal kan er verschillende woorden en syntaxis voor gebruiken, maar ze bereiken allemaal hetzelfde, namelijk om voorwaardelijke uitvoering mogelijk te maken. Het programma kan kiezen welke code het uitvoert op basis van een bepaalde voorwaarde, zoals de waardevolle variabele, of een bestand leeg is of een aantal dingen. Een van de eerste dingen die elke nieuwe programmeur leert, is hoe je een if-else-instructie kunt gebruiken, waarmee je programma een van de twee mogelijke paden kan nemen. Als een of andere aandoening dit doet, doe dat anders. Dingen kunnen een beetje verwarrender worden wanneer we beginnen met het bouwen van complexe voorwaardelijke uitspraken die meer dan alleen twee mogelijke keuzes hebben. De manier waarop wij als mensen beslissingen nemen tussen verschillende opties is anders dan een computer. Computers kunnen alleen binaire beslissingen nemen, wat betekent dat het slechts tussen twee dingen tegelijk kan kiezen. Dus zelfs complexe voorwaardelijke uitspraken met veel opties komen echt neer op een reeks binaire keuzes die een computer kan maken. Ik heb een aantal vrienden die later pizza komen eten en bordspellen spelen, wat betekent dat ik moet beslissen welk type pizza ik wil bestellen. Ik wil een goede gastheer zijn door een pizza te krijgen waar al mijn vrienden van kunnen genieten, dus ik moet rekening houden met eventuele dieetbeperkingen die ze hebben, wanneer ik die beslissing neem. Gelukkig is Olivia hier om me te helpen dat uit te zoeken. Ik heb iets te veel tijd besteed aan programmeren, dus ik heb de neiging om te denken als een computer. Olivia daarentegen is veel menselijker. - Nou, wat voor pizza moeten we krijgen? - Dat is een open vraag die ik als computer niet wil behandelen. - Hmm. Tja, is er iemand die geen vlees kan eten? In dat geval moeten we kaaspizza krijgen. - Ja, Verne eet niet, daarom krijgen we een kaaspizza. - Wacht, maar wacht even. - Beslissing genomen. - Verne is veganist, wat betekent dat hij geen vlees of kaas kan eten. We zouden in plaats daarvan een veganistische pizza moeten krijgen. - Te laat, de beslissing is genomen, geen vragen meer. - Verne zal het niet kunnen eten. - Ik luister niet naar je. - Naast vervelend acteert Verne zich ook als een als-anders-als-keten in een programma. Een if-else-if chain is een reeks vragen die in volgorde worden gesteld. De eerste vraag en alleen de eerste vraag waarvan het antwoord "ja" is, krijgt de bijbehorende acties uitgevoerd. Eventuele vragen daarna worden nooit overwogen. Mensen hebben de neiging om een reeks vragen te stellen die begint met heel algemeen, en dan specifieker te komen om het te beperken tot het uiteindelijke antwoord. Een als-anders-als-keten stelt ook een reeks vragen, maar zal de eerste echte optie kiezen, zelfs als de andere voorwaarden ook waar zijn. Dat betekent dat de if-else-if-keten een hiërarchie heeft. De gevallen die op de eerste plaats komen, hebben een hoge prioriteit dan alle andere gevallen die erop volgen, omdat ze eerst worden geëvalueerd. - Ik zal me voorlopig niet meer gedragen als een vervelende computer om je wat voorbeeldcode te laten zien. Het script van deze Python genaamd start_09_01_choose_pizza bevat een if-elif-else-verklaring die het gesprek weergeeft dat ik zojuist met Olivia had om te beslissen welke pizza ik moest bestellen. Hoewel er drie mogelijke uitkomsten zijn van deze structuur: ik kan de kaaspizza, de veganistische pizza of iets anders krijgen - het komt tot een beslissing tot een reeks binaire keuzes. Elk van de expressies na een als en elif kan worden geëvalueerd tot een Booleaanse waarde, wat betekent dat elke expressie waar of onwaar is. Er zijn maar twee opties. Uw programma evalueert deze expressies in volgorde van boven naar beneden totdat het degene vindt die waar is. Het voert de bijbehorende code uit en verlaat vervolgens de if-elif-else-structuur zonder er naar items te kijken. Er kunnen meerdere expressies zijn in de als-elif-anders-structuur, maar alleen de eerste die evalueert naar waar zal worden gekozen en uitgevoerd. Voor dit voorbeeld heb ik een set gemaakt met de naam diet_restrictions, dingen die Verne niet eet omdat hij veganist is. Ik gebruik deze set in mijn if-elif-else statement om te bepalen welke pizza ik moet bestellen. De eerste vraag die Olivia me stelde was of er iemand langskwam die geen vlees kon eten. Dit komt overeen met de eerste uitdrukking in mijn structuur, die zal evalueren of vlees in de reeks dieetbeperkingen zit, wat het is. De volgende uitdrukking op de elif-lijn zal ook worden geëvalueerd om waar te zijn, omdat het controleert of zowel vlees als kaas in de dieetbeperkingen van Verne zitten, wat ze zijn. Als ik het script draai staat er dat ik de kaaspizza moet bestellen, wat een probleem gaat worden omdat Verne geen kaas eet. Omdat de eerste optie - vlees - als ware is beoordeeld, is die optie geselecteerd en heeft het niet eens overwogen om een veganistische pizza te bestellen. Dit is hetzelfde probleem waar Olivia en ik tijdens ons gesprek tegenaan liepen. Ze begon met me de minder beperkende vraag te stellen of iemand geen vlees eet. Omdat dat waar was, besloot ik die zaak uit te voeren en de kaaspizza te bestellen voordat ze me de meer beperkende vraag over vlees en kaas kon stellen. Het is erg belangrijk om deze hiërarchie in gedachten te houden bij het schrijven van if-elif-else-ketens. De meer beperkende opties moeten bovenaan de verklaring komen waar ze een hogere prioriteit hebben. Om dit probleem op te lossen, zal ik eerst de if-verklaring bovenaan aanpassen om de meest beperkende optie te zijn: vlees en kaas. En als dat waar is, bestellen we een veganistische pizza. Vervolgens zal ik de uitdrukking voor de elif-verklaring veranderen in de meest beperkende door de vereiste van kaas te verwijderen. En als dat waar is dan bestel ik de kaaspizza. Wanneer ik dit script opnieuw opsla en uitvoer, selecteert het de veganistische pizza, wat de juiste keuze is gezien de dieetbeperkingen van Verne. Wanneer u een if-elif-else-structuur schrijft, neem dan de tijd om na te denken over hoe de verschillende gevallen zich tot elkaar verhouden en beslis welke opties de hoogste prioriteit moeten hebben en als eerste in de reeks moeten komen. U wilt de situatie vermijden waarin een belangrijke voorwaarde met hoge prioriteit nooit wordt geëvalueerd omdat deze te ver in de als-elif-anders-keten ligt en er eerdere omstandigheden zijn die ook als waar worden beoordeeld.

Inhoud