Coding for KidsCoding for Kids
Kreative NivåerUtfordringerLærerveiledning
Stem på funksjoner
Avansert Pythonutviklingskurs
Kapittel
>
Nivå

Streng- og tidsmoduler
Strengmodul

Mål

Samle applikasjonsdata og send ut svarbrev ved hjelp av string-modulen.

Nå som materialet for den nye gårdsbygningen er tatt i betraktning, er det på tide å rette oppmerksomheten mot nytt arbeidskraft til gården. Vi har flere brev som må sendes ut for jobbsøknader, noe som naturligvis ville kreve mye skriving, men vi kan bruke string-modulen for å kompensere for dette ved å lage maler og formatere tekst for å gjøre det enklere å håndtere større tekstblokker.

Å importere string-modulen denne gangen vil gjøres litt annerledes enn andre moduler ettersom vi skal importere klasser som utvider modulen, og de vil bli utført på følgende måte:

import string from string import Template from string import Formatter

Dette gir oss tilgang til modulen selv samt til mal- og formateringsklassene som inneholder sine egne funksjoner. For våre formål skal vi bruke følgende funksjoner og klasser:

  • string.capwords(): Denne funksjonen konverterer strengord til å ha korrekt kapitalisering, slik at det første bokstaven i et ord blir stor og resten små, uavhengig av hvordan strengen er formatert.
  • Template(): Dette er en strengklasse som brukes til å lage et malobjekt. Den benytter funksjonen substitute() som lar deg sette opp en streng og markere et sted med $-tegnet for å bytte ut data. Dette gjør det mulig å lage modulære strenger du kan bruke etter behov.
  • Formatter(): Dette er en strengklasse som brukes til å formatere eller komponere en streng. Den fungerer på en lignende måte som Template()-klassen, men er mer robust og egner seg bedre for lengre strengsekvenser. Den bruker funksjonen format() som lar deg sette opp en streng og sette inn strengdata ved hjelp av {}.

Start med å gå til det lyse X-merket og bruk funksjonen read() mens du vender mot arkivskapet. Dette vil gi deg tilgang til mapper med navn på de ulike søkerne. Disse mappene er tilgjengelige som tre (3) listekonstanter med navn: folder_a, folder_b og folder_c.

Gå til det mørke X-merket over det grønne teppet og vend mot pulten. Lag tre (3) lister kalt: names_a, names_b og names_c. Bruk listeforståelser sammen med funksjonen string.capwords() for å formatere navnene med korrekt kapitalisering. Par listene med de konstantene som har samme bokstav i navnet; for eksempel, for names_a bruk string.capwords() med folder_a, slik: names_a = [string.capwords(x) for x in folder_a]. Bruk samme metode for å fylle ut names_b og names_c.

Lag en liste kalt all_names og sett sammen de tre (3) navnelistene, slik: all_names = names_a + names_b + names_c. Dette kombinerer alle listene til én større liste. Følg opp med å bruke Python-funksjonen join(), som vil slå sammen alle elementene i listen til en streng. Du kan også spesifisere hva som skal stå mellom hvert element ved å oppgi det i anførselstegn, slik: all_names = ", ".join(all_templates). Bruk den forhåndsskrevne write()-funksjonen med all_names-listen for å skrive ned alle navnene med korrekt kapitalisering.

Deretter, gå til det gylne X-merket og vend mot pulten. Her skal vi sette opp maler. Vi har to forhåndsskrevne malobjekter kalt red_templates og blue_templates:

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

Hver av disse malene har en unik melding, men de har én ting til felles: en plassholder merket $name. $-symbolet brukes til å angi en plassholder som kan byttes ut med en streng du velger, i dette tilfellet et navn. Om ingen verdi byttes ut, vil malen bare vise plassholderen i strengen. Som et supplement, lag en liste kalt all_templates.

Lag en for-løkke med fire (4) sykluser. Med denne løkken vil vi erstatte navnene i de tre (3) navnelistene med malene som inkluderer navn. For eksempel skal vi bruke red_template på listen names_a. Bruk funksjonen substitute() fra Template()-klassen for å bytte ut $name-plassholderen i malen med navnene fra listen.

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

Gjør det samme med names_b og names_c: for names_b bruk red_template, og for names_c bruk blue_template.

Når alle navnelistene har blitt oppdatert med de nye malene, er det på tide å gjennomgå dem. Lag en ny liste kalt all_templates og kombiner alle navnelistene, slik: all_templates = names_a + names_b + names_c. Bruk den samme join()-funksjonen som før for å sette sammen alle de malbaserte navnene til en lesbar form, slik: all_templates = "\n".join(all_templates). Bruk den forhåndsskrevne write()-funksjonen med all_templates for å skrive ut alle overskriftene for de forskjellige navnene.

Deretter går du opp til det mørke X-merket over det røde teppet og vender mot pulten. Her skal vi formatere og skrive den første serien med brev. Start med å opprette to (2) formatteringsobjekter kalt red_1 og red_2 med klassebetegnelsen, slik: red_1 = Formatter(), red_2 = Formatter(). For å komponere brevene, lag en liste kalt red_letters.

Akkurat som tidligere skal vi ha en for-løkke med fire (4) sykluser. Vi vil ha to sett med forhåndsskrevne strenger som skal formateres ved hjelp av funksjonen format(), og som skal få lagt til navnevariablene. Disse formaterte strengene vil bli lagt til i listen red_letters, noe som danner en omfattende liste med brev som skal sendes ut. For eksempel, vil red_1-objektet formateres med names_a-listen og deretter legges til i red_letters-listen.

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

Gjør det samme med red_2-objektet ved å bruke den forhåndsskrevne strengen og legg til names_b i løkken. Når alt er satt opp, bruk join()-funksjonen med red_letters for å kombinere dataene til én enkelt fil, slik: red_letters = "\n".join(red_letters). Bruk write()-funksjonen med red_letters for å skrive ned alle de formaterte brevene som skal sendes ut.

Til slutt, gå til det mørke X-merket over det blå teppet og vend mot pulten. Her skal vi formatere og komponere den siste serien med brev. Akkurat som tidligere, opprett to (2) formatteringsobjekter kalt blue_1 og blue_2 med klassebetegnelsen, slik: blue_1 = Formatter(), blue_2 = Formatter(). Lag en liste kalt blue_letters for å formatere og komponere alle brevene.

Lag igjen en for-løkke med fire (4) sykluser og bruk de forhåndsskrevne strengene for å formatere navnelistene og legge dem til i blue_letters-listen ved hjelp av funksjonen format(). I dette tilfellet, par blue_1-objektene med names_c-listen og blue_2-objektene med names_b-listen. Alt dette gjøres på samme måte som over det røde teppet, men med andre verdier, noe som viser allsidigheten ved å bruke formater og maler. Når du er ferdig, bruk write()-funksjonen med blue_letters for å arkivere de siste brevene og fullføre nivået.

Kodebok