Coding for KidsCoding for Kids
Creatieve LevelsUitdagingenLerarengids
Stem op functies
Gevorderde Python-ontwikkelingscursus
Hoofdstuk
>
Niveau

String- en Tijdsmodules
Stringmodule

Doel

Verzamel sollicitatiegegevens en verstuur responsbrieven door gebruik te maken van de string module.

Nu dat het materiaal voor de nieuwe boerderijbouw is verantwoord, is het tijd onze aandacht te richten op nieuw personeel voor de boerderij. We hebben meerdere brieven die verstuurd moeten worden voor sollicitaties; dit zou natuurlijk veel schrijven vergen, maar we kunnen de string module inzetten om dit te compenseren door sjablonen te creëren en tekst te formatteren, zodat we makkelijker met grote teksten kunnen werken.

Het importeren van de string module verloopt deze keer iets anders dan bij andere modules, aangezien we klassen gaan importeren die de module uitbreiden, en deze worden op de volgende wijze uitgevoerd:

import string from string import Template from string import Formatter

Hierdoor hebben we toegang tot de module zelf en tot de template- en formatterklassen die hun eigen functies bevatten. Voor onze doeleinden zullen we de volgende functies en klassen gebruiken:

  • string.capwords(): Deze functie zorgt ervoor dat woorden in een string de juiste hoofdlettergebruik krijgen, waarbij de eerste letter een hoofdletter is en de rest kleine letters, ongeacht de oorspronkelijke opmaak van de string.
  • Template(): Dit is een stringklasse die gebruikt wordt om een templateobject te maken. Het maakt gebruik van de functie substitute() die je in staat stelt een string op te zetten en een locatie te markeren met behulp van het $-teken om data in te wisselen. Dit stelt je in staat modulaire strings te maken die je naar behoefte kunt gebruiken.
  • Formatter(): Dit is een stringklasse die gebruikt wordt om een string te formatteren of samen te stellen. Het werkt op een vergelijkbare manier als de Template() klasse, maar is robuuster en beter geschikt voor langere stringsequenties. Het gebruikt de functie format() waarmee je een string kunt opzetten en verschillende stukjes stringdata kunt invoegen met behulp van {}.

Begin door naar het lichte X-teken te lopen en de read() functie te gebruiken terwijl je tegenover het archiefkast staat; dit stelt je in staat mappen te openen met de namen van diverse sollicitanten. Deze mappen zijn aanwezig als drie (3) lijstconstanten genaamd: folder_a, folder_b en folder_c.

Loop vervolgens naar het donkere X-teken over het groene tapijt en ga richting het bureau staan. Maak drie (3) lijsten genaamd: names_a, names_b en names_c. Gebruik list comprehensions in combinatie met de functie string.capwords() om een correcte hoofdlettergebruik voor de namen te formatteren. Koppel de lijsten met de constanten die dezelfde letters in hun naam hebben; bijvoorbeeld voor names_a gebruik je string.capwords() met folder_a, zoals dit: names_a = [string.capwords(x) for x in folder_a]. Gebruik dezelfde formule voor het vullen van names_b en names_c.

Maak een lijst genaamd all_names en voeg de drie (3) namenlijsten samen, zoals dit: all_names = names_a + names_b + names_c. Dit combineert alle lijsten tot één grotere lijst. Vervolgens gebruik je de Python functie join() om alle lijstitems samen te voegen tot één string. Je kunt ook aangeven wat er tussen elk lijstitem moet komen door dit tussen aanhalingstekens op te geven, zoals dit: all_names = ", ".join(all_templates). Gebruik de vooraf geschreven write() functie met de lijst all_names om alle namen in de juiste hoofdlettergebruik neer te zetten.

Vervolgens loop je naar het gouden X-teken en ga je richting het bureau staan; hier zullen we sjablonen instellen. We hebben twee vooraf geschreven templateobjecten genaamd red_templates en blue_templates:

red_template = Template( "Hello, $name , thank you for applying for this position.") blue_template = Template( "Esteemed , $name , your application has been approved.")

Elk van deze sjablonen bevat een unieke boodschap, maar ze delen allebei één placeholder, namelijk $name. Het $-teken wordt gebruikt om een placeholder aan te geven die kan worden vervangen door een door jou gekozen string; in dit geval, zoals de titel aangeeft, een naam. Indien er geen waarde wordt ingevuld, zal het sjabloon louter de placeholder in de string weergeven. Maak daarnaast een lijst genaamd all_templates.

Maak een for-loop met vier (4) cycli; hiermee zullen we de namen in de drie (3) namenlijsten vervangen door sjablonen met de ingesloten namen. Bijvoorbeeld, we zullen het red_template toepassen op de names_a lijst. Gebruik de functie substitute() van de Template() klasse om de placeholder $name in het sjabloon te vervangen door de namen in de lijst.

for x in range(4): names_a[x] = red_template.substitute(name=names_a[x])

Doe hetzelfde voor names_b en names_c; gebruik voor names_b ook het red_template en voor names_c het blue_template.

Wanneer alle namenlijsten zijn gevuld met de nieuwe sjablonen, is het tijd om ze te bekijken. Maak een nieuwe lijst genaamd all_templates en voeg alle namenlijsten samen, zoals dit: all_templates = names_a + names_b + names_c. Gebruik dezelfde join() functie als eerder om alle sjabloongebruikte namen samen te voegen tot een leesbare vorm, zoals dit: all_templates = "\n".join(all_templates). Gebruik vervolgens de vooraf geschreven functie write() met all_templates om alle koppen voor de verschillende namen op te sommen.

Daarna loop je naar het donkere X-teken over het rode tapijt en ga je richting het bureau staan; hier zullen we de eerste set brieven formatteren en schrijven. Begin met het aanmaken van twee (2) formatterobjecten genaamd red_1 en red_2 met de class-notatie, zoals dit: red_1 = Formatter(), red_2 = Formatter(). Voor de samenstelling van de brieven maak je een lijst genaamd red_letters.

Net als eerder maak je een for-loop met vier (4) cycli. We zullen twee sets van vooraf geschreven strings formatteren met de format() functie en de namenvariabelen daaraan toevoegen. Deze geformatteerde strings worden toegevoegd aan de lijst red_letters, waarmee een uitgebreide lijst van brieven ontstaat die verzonden zullen worden. Bijvoorbeeld, de red_1 formatterobjecten worden geformatteerd met de names_a lijst en toegevoegd aan red_letters.

for x in range(4): red_letters.append(red_1.format( "{} Orientation will begin next week, please report to the office..." , names_a[x]))

Doe hetzelfde met het red_2 formatterobject door de vooraf geschreven string te gebruiken en voeg names_b toe aan de loop. Zodra dit alles is ingesteld, gebruik je de join() functie met red_letters om de gegevens samen te voegen tot één bestand, zoals dit: red_letters = "\n".join(red_letters). Gebruik vervolgens de functie write() met red_letters om alle geformatteerde brieven die verstuurd worden op te schrijven.

Tot slot loop je naar het donkere X-teken over het blauwe tapijt en ga je richting het bureau staan; hier zullen we de laatste set brieven formatteren en samenstellen. Maak, net als voorheen, twee (2) formatterobjecten genaamd blue_1 en blue_2 met de class-notatie, zoals dit: blue_1 = Formatter(), blue_2 = Formatter(). Maak een lijst genaamd blue_letters om alle brieven te formatteren en samen te stellen.

Maak nogmaals een for-loop met vier (4) cycli en gebruik de vooraf geschreven strings om de namenlijsten te formatteren en voeg ze toe aan de blue_letters lijst met de format() functie. In dit geval koppel je de blue_1 formatterobjecten aan de names_c lijst en de blue_2 formatterobjecten aan de names_b lijst. Dit gebeurt op dezelfde wijze als over het rode tapijt, maar met andere waarden, wat de veelzijdigheid van het gebruik van formats en sjablonen aantoont. Zodra dit is afgerond, gebruik je de functie write() met blue_letters om de laatste brieven te archiveren en het level te voltooien.

Codeboek