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

Streng- og tidsmoduler
Regex-modul

Målsetning

Verifiser og organiser filer som angår ansatte og sonetildelinger ved hjelp av regulære uttrykk.

På nabokontorene finnes det dokumentasjon som må oppdateres angående ansatte som begynner å arbeide på det nye jordbruksområdet og soningen for hvor avlinger og husdyr skal pleies.

Å administrere filer kan være ganske utfordrende, spesielt når man håndterer store mengder strengtekst. For dette formålet skal vi bruke re-modulen, som er en forkortelse for Regular Expressions, også forkortet Regex. Vi får tilgang til dens funksjoner ved å bruke import re. For formålet med dette nivået skal vi bruke følgende funksjoner:

  • re.findall(): Returnerer en liste over alle forekomster av en streng. Tar to (2) argumenter: det første er hvilke tegn du leter etter i strengen, og det andre er strengen som skal søkes i.
  • re.sub(): Erstatter en angitt forekomst med en bestemt streng. Tar tre (3) argumenter: det første er hvilke tegn du ønsker å erstatte, det andre er hva du ønsker å erstatte det med, og det tredje er strengen du vil søke i.
  • re.search(): Finner plasseringen av noe i en streng og returnerer et objekt. Tar to (2) argumenter: tegnene du søker etter og strengen du søker i. Du kan bruke andre funksjoner med objektet det returnerer, for eksempel span() som returnerer en vektor med start- og sluttposisjonene for det søkte elementet i teksten.
  • re.split(): Deler opp en streng i en liste med angitte intervaller. Tar to (2) argumenter: det første angir hvor strengen skal deles, og det andre er strengen du vil dele opp.
  • re.match(): Sjekker om en streng inneholder en bestemt verdi i begynnelsen av strengen. Denne fungerer som en forenklet versjon av funksjonen re.search(), men er mer effektiv og sjekker om strengen du søker i har spørringen i starten.

Modulen re kan også bruke spesialsekvenser; det finnes koder du kan bruke med re-funksjonene som lar deg dekke et bredt spekter av streng-egenskaper. Det finnes en lang liste med spesialsekvenser, men for dette nivået skal vi bruke følgende:

  • \B: Sjekker om spesifiserte tegn finnes i strengen, men ikke er plassert i begynnelsen eller slutten av et ord.
  • \D: Returnerer tegn som ikke er sifre fra 0 til 9

Hvis det er et r foran en spesialsekvens, betyr det at den sjekker en rå streng.

Begynn med å gå til det gylne X-merket og vend deg mot bordet med notatet. Bruk funksjonen read() for å sjekke notatet som inneholder et manifest over alle ansatte. Hvert navn inneholder # som skiller deres ansattnummer, og strengen med navnene er også lagret i en konstant kalt manifest.

Lag en liste kalt tags og lagre verdien fra re.findall(), som brukes for å søke etter alle # i manifest-konstanten, slik: tags = re.findall("#", manifest). Lag deretter en variabel kalt number og bruk len()tags-listen for å telle hvor mange elementer som er på listen; dette vil gi oss antall ansatte på manifestet. Bruk funksjonen speak() med variabelen number for å kunngjøre hvor mange navn som er på listen.

Deretter, gå til det lyse X-merket ved siden av den blå teppen, vend deg mot skrivebordet, og bruk funksjonen read(). Her finner du en liste over nyansatte med deres tildelte stillinger. Noter navnene for hver yrkesgruppe slik at du kan kryssjekke med de personene som for tiden er tildelt. Gå videre til X-merket over den blå teppen og bruk read() igjen for å verifisere de nåværende stillingene.

Den nåværende arbeidsstyrken er lagret i en konstant kalt assignments; vi må oppdatere dette dokumentet med informasjonen fra listen over nyansatte. Erstatt navnene som er forskjellige i listen ved å bruke funksjonen re.sub() for å erstatte en del av strengen med en annen. For eksempel er en av endringene som følger:

assignments = re.sub("Billy Hodgins", "Carol Hopkins", assignments)

Navnet "Billy Hodgins" blir erstattet med "Carol Hopkins" i dokumentet. Bortsett fra denne endringen, gå gjennom dokumentet og oppdater dette og ett annet navn i listen for å fullstendig oppdatere dokumentet. Bruk funksjonen write() med assignments for å sjekke resultatene.

Nå som vi har tatt oss av ansattlistene, er det på tide å gå videre til soningen for gården. Gå til det mørke X-merket over det røde teppet og bruk funksjonen read(); dette vil vise deg en detaljert oversikt over soningen. Denne informasjonen er lagret i en konstant kalt zones.

Det er spesielt viktig å identifisere plasseringen av 6210 i dokumentet, ettersom sonen må revurderes. For å gjøre dette må vi bruke funksjonen re.search() for å identifisere plasseringen av det sektornummeret i soningen. Lag en variabel kalt index og lagre søkeobjektet; utfør søket med r"6210\B". Dette betyr at r søker etter en rå streng, 6210 er sektorenummeret vi leter etter, og \B er den spesielle sekvensen som brukes som kriterium for søket. Dette utføres slik: index = re.search(r"6210\B", zones).

Nå som index inneholder et søkeobjekt, er det på tide å hente ut data fra det ved hjelp av span(). Lag en variabel kalt vector og lagre plasseringen fra søkeobjektet, slik: vector = index.span(). Når dette er satt opp, bruk vektor-variabelen med den forhåndsskrevne write().

Neste steg er å identifisere soneringsobjektene. Gå til det mørke X-merket over den grønne teppen. Lag en liste kalt sectors og bruk funksjonen re.split() for å samle alle de ulike soneområdene i en liste. I split-funksjonen, bruk den spesielle sekvensen "\D" for å hente ut kun tallene fra zones-variabelen. Bruk en listeforståelse for å fjerne eventuelle tomme elementer i listen ved å bruke len() for å fjerne elementer som er for små til å være et sektornummer. Slik:

sectors = re.split("\D", zones) sectors = [x for x in sectors if len(x) > 3]

Bruk zones med write()-funksjonen for å notere alle soneområdene.

Gå til det lyse X-merket ved siden av den lilla teppen og vend deg mot arkivskapet, bruk funksjonen read() for å verifisere prioriterte soner i jordbrukssoningen. Noter soneområdene, da vi må undersøke om disse sonene finnes i sone-listen.

Gå til det mørke X-merket over den lilla teppen. Det finnes tre (3) prioriterte soner i variablene kalt: sector_a, sector_b, sector_c, som er forhåndsskrevne i kodeeditorene. Sett inn verdiene du leste ved det lyse X-merket. Disse variablene bruker en listeforståelse som går gjennom alle elementene i sectors-listen og filtrerer dem med re.match()-funksjonen. Bruk variablene sector_a, sector_b og sector_c og sett dem inn i den forhåndsskrevne write()-funksjonen for å fullføre nivået.

Kodebok