Python: Strenger. (Pluss mer om lister og tupler) TDT4110 IT Grunnkurs Professor Guttorm Sindre. 3. utgave: Kapittel 8 (og 7)

Like dokumenter
Python: Strenger 3. utgave: Kapittel 8

TDT4110 Informasjonsteknologi grunnkurs: Tema: Mer om strenger. - 3rd edition: Kapittel 8. Professor Alf Inge Wang

TDT4110 Informasjonsteknologi grunnkurs: Tema: Mer om strenger Utgave 3: Kap. 8

TDT4110 Informasjonsteknologi grunnkurs: Tema: Lister og tupler. - 3rd edition: Kapittel 7. Professor Alf Inge Wang

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Lister og tupler Gaddis: Kapittel 7

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Repetisjon, del 2. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Valg og betingelser. TDT4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 IT Grunnkurs Høst 2015

Læringsmål og pensum. if (be): else (not_to_be):

AlgDat - Øvingsforelesning 1 Introduksjon til Python, lenkede lister og øving 1

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

Oppsummering fra sist

Python: Variable og beregninger, input og utskrift. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Rekursjon (og programmering av algoritmer) Python-bok: Kapittel 12 + teoribok om Algoritmer

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker. - 3rd edition: Kapittel 4. Professor Alf Inge Wang

Læringsmål og pensum. Intro løkker. Mål Lære om begrepet løkker Lære om bruk av while-løkke Lære om bruk av for-løkke Pensum. Kapittel 4.

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

Øvingsforelesning 5 Python (TDT4110)

Løse reelle problemer

Øvingsforelesning 5 Python (TDT4110)

Mattespill Nybegynner Python PDF

Repetisjon, del 1. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU

TDT4110 Informasjonsteknologi grunnkurs: Uke 43: Datastrukturer (kap. 8)

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

Python: Oppslagslister (dictionaries) og mengder 3. utgave: Kapittel 9

TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og mengder (sets) - Kapittel 9. Professor Alf Inge Wang

TDT4105 Informasjonsteknologi grunnkurs: Uke 43: Datastrukturer (kap. 8)

Læringsmål og pensum. Oversikt

Objektorientert programmering i Python

MENGDER (SETS) Læringsmål og pensum. Kapittel 9.2

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og sets (mengder) Utgave 3: Kap. 9. Terje Rydland - IDI/NTNU

YouTube-kanal ITGK. Læringsmål og pensum

Python: Filer og unntak Gaddis: Kapittel 6

print("hurra!") som ikke har innrykk, er ikke del av løkka, og vil derfor bare bli utført en gang, etter at løkka er ferdig.

IN1140 Ekstraoppgaver uke 3

Pensum: Starting out with Python

TDT4110 IT Grunnkurs Høst 2016

TDT4110 Informasjonsteknologi grunnkurs: Tema: Enkle funksjoner. - 3rd edition: Kapittel Professor Alf Inge Wang

Python: Filer og unntak Gaddis: Kapittel 6

INF120: Oblig 3. Yngve Mardal Moe

Kap 2: Løkker og lister

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

TEKSTSTRENGER GRUNNLEGGENDE STRENGOPERASJONER. 2 TESTING, SØKING OG MANIPULERING AV TEKSTSTRENGER. 3 FORMATTERING. 5 BETINGEDE KONTROLLSTRUKTURER.

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

Forelesning inf Java 5

Forelesning inf Java 5

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Mål. Pensum. I større, kompliserte programmer er det viktig å organisere koden godt Modularisering: å gruppere relaterte funksjoner i moduler

Øvingsforelesning 7 i Python (TDT4110)

TDT4110 IT Grunnkurs Høst 2016

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6. Terje Rydland - IDI/NTNU

Læringsmål og pensum. Algoritmeeffektivitet

TDT4110 Informasjonsteknologi grunnkurs: Tema: Algoritmer i praksis. Professor Alf Inge Wang

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster

TDT4110 Informasjonsteknologi grunnkurs: Eksempler. Mangekanter

Løse reelle problemer

Løsningsforslag til eksamen i INF1000

TDT4110 Informasjonsteknologi grunnkurs: Tema: Lister og tupler Kap 5: Egne moduler + et større eksempel Kap. 7

TDT4110 Informasjonsteknologi grunnkurs: Tema: Funksjoner med retur og moduler. - 3rd edition: Kapittel Professor Alf Inge Wang

Python: Variable og beregninger, innlesing fra tastatur utskrift til skjerm. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Systemutvikling (Software Engineering) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Python: Repetisjon. Professor Alf Inge Wang

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Lage større programmer (Python, relatert til teoridelen om Software Engineering ) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Del 1 En oversikt over C-programmering

Kapittel 1 En oversikt over C-språket

Øvingsforelesning 1 Python (TDT4110)

TDT4102 Prosedyreog objektorientert programmering Vår 2016

TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak ( exceptions ) - 3rd edition: Kapittel 6. Professor Alf Inge Wang

Læringsmål og pensum. Inn- og utoperasjoner 21/10/16

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller:

Datastrukturer (kap. 8)

INF Ekstrainnlevering

INF1000 (Uke 6) Mer om metoder, tekster

Rep: Metoder. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. 3 typer variable: Klassevariable. Java-programmene så langt i kurset:

Objektorientert programmering i Python. Resten av semesteret. Innhold uke 9 Mer komplekse strukturer. Referanser og objekter, inkl Mentimeter spørsmål

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Introduksjon til objektorientert programmering

TDT4105 Informasjonsteknologi, grunnkurs

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Øvingsforelesning i Python (TDT4110)

Læringsmål og pensum. Intro til returverdifunksjoner: Generering av tilfeldige tall 27/09/16

TDT4105 Informasjonsteknologi grunnkurs: Uke 42 Strenger og strenghåndtering

TDT4105 Informasjonsteknologi, grunnkurs MatLab: Filbehandling - load, save, type - fopen, fgetl, feof, fprintf, fclose

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

Læringsmål uke 7. Introduksjon til objektorientert programmering. Paradigmet objektorientering. Objektreferanser. INF1001 Høst 2016 Uke 7

UNIVERSITETET I OSLO

Læringsmål og pensum

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Innhold uke 8. Objekter: Bruk og intern organisering. Beskjeder: Oblig 1 6. Beskjeder: Oblig 7 (og 8)

Transkript:

Python: Strenger (Pluss mer om lister og tupler) 3. utgave: Kapittel 8 (og 7) TDT4110 IT Grunnkurs Professor Guttorm Sindre

Læringsmål og pensum Mål Forstå Hva strenger er Grunnleggende operasjoner på strenger Indeksering av tegn i strenger, inkl. slicing Kjenne til noen vanlige funksjoner og metoder på strenger Kunne løse praktiske programmeringsproblemer med strenger Pensum Starting out with Python: Chapter 8 More About Strings (3rd edition)

Tekststrenger (string) HVORFOR trenger vi dette? Informasjon: tekst spiller en sentral rolle Veldig mange nyttige programmer behandler tekst Tekstbehandling, weblesere, søkemotorer Journalistikk, publisering Saksbehandlingssystemer Teknisk informasjon, brukerveiledninger, Oversettingsprogrammer Tekststrenger i Python En av de elementære datatype Men også en sekvens av enkelttegn Som tuppel: ikke muterbar 3

Aksessere deler av strenger Få tak i enkelttegn: bruke indeks (kap 8.1) tekst = Dette er en test tekst[0] # Gir D tekst[14] # Gir s tekst[-1] # Gir t, siste tegn (nest siste: -2, osv.) Få tak i større deler av en streng: slicing (kap 8.2) Syntaks: string[start : end : step] tekst = Dette er en test tekst[0:3] # Gir Det ~ tekst[:3] tekst[12:16] # Gir test ~ tekst[12:] tekst[::2] # Gir Dtee nts (annenhvert tegn) 4

for-løkker gjennom strenger (8.1) Se på ett og ett tegn Som for lister: to muligheter Aksessere tegnene direkte: enklest Som her, skal bare skrive teksten loddrett Aksess via indeks Tungvint her, trengs hvis posisjon i strengen er viktig F.eks finne hvor i strengen det står en dobbel konsonant s = Dette er en test # Aksessere tegnene direkte for t in s: # t blir D, så e, så t print(t) s = Dette er en test # Aksessere tegnene via indeks for i in range(len(s)): # i blir 0, så 1, 2,, 14 print(s[i]) # da blir s[i] D, e, t, osv. 5

Forskjell på funksjoner og metoder Gjelder både strenger, lister, tupler Funksjoner er frittstående Strengen (eller lista, tuplet, ) som funksjonen skal jobbe på, må gis inn som argument når funksjonen kalles, f.eks. len(s) list(s) int(s) # gir lengde av strengen s # gir ei liste av enkelttegnene i strengen # gir et heltall fra strengen (hvis mulig) Metoder eies av strengobjektet (eller listeobjektet ) Strengen selv gis IKKE inn som argument i ( ) Står i stedet foran metodekallet med dot-notasjon, f.eks. s.upper( ) # returnerer tilsv. streng med bare store bokstaver s.replace( å, aa ) # returnerer tilsv. streng, alle å byttet med aa liste.sort( ) # ber liste om å sortere seg selv (fins ikke for # strenger, som er immutable) 6

Strengoperasjoner, forts. Sette sammen flere strenger til en (konkatenering) Bruk operatoren +, f.eks. navn = fornavn + etternavn Sette et tall inn i en streng, bruk str(): respons = ' Du har ' + str(saldo) + ' kroner på kontoen ' Sette sammen liste av strenger: metoden join() ' - '.join([' Berkåk ', ' Å', ' Meldal ' ]) # gir ' Berkåk-Å-Meldal ' Splitte en streng i flere strenger, metoden split() Gir ei liste av delstrenger (unntatt skilletegnet) Blank er default skilletegn, kan gi annet som argument t = 'Dette er en test' L = t.split() u = '1;2;4;6;4;4;3' V = u.split(';') # Gir: ['Dette', 'er', 'en', 'test'] # Gir ['1', '2', '4', '6', '4', '4', '3'] 7

Eksempel: Vi vil lage et program som gjør dette: Adjektivene skal tastes inn av brukeren, resten skrives av programmet Hvordan tenke her? 8

Eksempel: Vi vil lage et program som følger: Adjektivene skal tastes inn av brukeren, resten skrives av programmet Hvordan tenke her? (A): Overordnet algoritme # 1: les inn adjektivene som en streng fra bruker # 2: splitt til ei liste av adjektiv, f.eks [ snill, flink, dum, ekkel ] FORDI: vi må se enkeltadjektivene for å gradbøye # 3: lag ei tilsvarende liste av adjektiv i komparativ # 4: skriv den dissende teksten på skjermen 9

Eksempel: Vi vil lage et program som følger: Adjektivene skal tastes inn av brukeren, resten skrives av programmet Hvordan tenke her? (B): Overordnet funksjonsinndeling main() les_inn_adj() komp_liste() print_diss() # 1: les inn adjektivene som en streng fra bruker m input() # 2: splitt til ei liste av adjektiv, f.eks [ snill, flink, dum, ekkel ] FORDI: #2 er enkel, løses på ei kodelinje med.split() # 3: lag ei tilsvarende liste av adjektiv i komparativ # 4: skriv den dissende teksten på skjermen Kode: dissing_bm_v0.py dissing_nyn_v0.py 10

Eksempel: Vi vil lage et program som følger: Adjektivene skal tastes inn av brukeren, resten skrives av programmet Hvordan tenke her? (C): Selve gradbøyinga main() Gå i for-løkke gjennom lista av adjektiv komp_liste() Finn komparativ form for ett og ett adjektiv Legg komparativ i ny liste Returner lista når løkka er slutt Mer komplekst. Best å lage egen funksjon, komparativ() som bøyer ett adj. Lag hjelpefunksjoner for behov som opptrer flere steder: - telle antall stavelser - sjekke om bokstav er vokal 11

Regler for komparativ form (BM) Normalt: legge til -ere snill snillere -m dobles etter vokal dum dummere men: kvalm - kvalmere Lange ord (>= 3 stavelser), mer desperat mer desperat -et og >1 stavelse, mer lettet mer lettet -el, -en, -er og >1 stavelse men: het - hetere Fjern e en nest bakerst, legg til -ere enkel-enklere, rusten-rustnere men: pen-penere Fjern dessuten en konsonant hvis dobbel: vissen-visnere, vakker-vakrere Noen adjektiv har uregelrett bøying og må bare huskes: god-bedre, stor-større, liten-mindre, korrupt-mer korrupt, 12

Reglar for komparativ form (Nyn) Normalt: leggje til -are snill snillare -m doblast etter vokal dum dummare men: kvalm - kvalmare Lange ord (>= 3 stavingar), meir desperat meir desperat -a, -ut og >1 staving, meir letta meir letta, pysut meir pysut -el, -en, -er og >1 staving Fjern e en nest sist, legg til -are enkel-enklare, rusten-rustnare men: pen-penare Fjern dessutan ein konsonant om dobbel: vissen-visnare, vakker-vakrare Somme adjektiv har uregelrett bøying, desse må vi berre hugse: god-betre, stor-større, liten-mindre, korrupt-meir korrupt, 13

Oppgave: Fullfør komparativ( ) Ta utgangspunkt i koden dissing_bm_v1.py eller dissing_nyn_v1.py LETTERE: (a) Skriv kode så komparativ( ) virker i det helt vanlige tilfellet, f.eks snillsnillere / snillare (b) Utvid koden så den også takler dobling av m etter vokal, f.eks dum-dummere / dummare MIDDELS: (a) LETTERE + Utvid koden så den takler uregelrette adjektiv ved å bruke de globale variablene (b) Utvid koden så den også takler adjektiv som slutter på -el, - en, -er (men uten sjekk på stavelser) VANSKELIGERE (a) Legg til en hjelpefunksjon for å telle antall stavelser i et ord (b) Benytt hjelpefunksjonen til å utvide koden til å takle korrekt de reglene som er avhengig av antall stavelser Fasit på dissing_bm_v2.py / dissing_nyn_v2.py 14

Testing, søking og manipulering av strenger Kapittel 8.3

Strengoperasjoner (forts.) Sjekke om streng inneholder tegn / delstreng: operatoren in Generelt format: streng1 in streng2 Kan f.eks brukes som betingelse i if- og while-setninger Fins også en motsatt operator not in Finne hvor i en streng et tegn er: metoden index() streng.index(tegn) streng.rindex(tegn) # finner første fra venstre # første fra høyre (bakfra) 16

Strengmetoder Strenger i Python har mange ferdige metoder Generelt format: mystring.method(arguments) Testemetoder (Table 8-1 i boka) Betingelser for hele strenger Returnerer True hvis betingelsen er sann ellers False. Modifiseringsmetoder: (Table 8-2 i boka) Kopier av strengene hvor noe kan være endret Søk- og erstatt-metoder (Table 8-3 i boka) Leter etter tegn / delstrenger i strenger Blir for oppramsende å forelese disse tabellene Sett deg ned i interaktiv modus og prøv deg fram! 17

Oppsummering Dette kapittelet dekket: Operasjoner på strenger, som Metoder for å iterere gjennom strenger Operatorer for repetisjon og konkatinering Strenger som ikke-muterbare objekter Å slice og teste strenger Metoder for strenger Å splitte opp strenger

Mer om lister Todimensjonale lister / matriser Kan lages i Python som lister av lister F.eks. 2 4-6 9 3 1-2 1 0 0 1-3 M = [ [2,4,-6,9], [3,1,-2,1], [0,0,1,-3] ] For å gå gjennom elementer i 2D-liste: dobbel løkke def vis_matrise(m): # vise M på skjermen rad- og kolonnevis for r in range(len(m)): # ant. element i ytre liste, dvs. ant. rader for k in range(len(m[0])): # ant. element i indre liste (kolonner) print(m[r][k], end = ) # printe ett tall, unngå linjeskift print( ) # indre løkke slutt, linjeskift før neste rad 19

Lister, referanser, kopiering Listevariabel inneholder referanse til datasekvensen liste2 = liste1 vil gjøre at begge peker på samme data i minnet Jfr. du kan gi Maler 1 en lapp med adr. til huset ditt, så gi Maler 2 en kopi av samme lapp Hvis du deretter endre innholdet i lista via den ene variabelen, vil dataene som den andre ser også bli endret (siden det er samme data) Jfr., hvis Maler 2 drar og lager rosa prikker på huset ditt, vil Maler 1 også finne et rosaprikket hus hvis han drar til samme adresse 20

Lister, kopiering (forts.) Noen ganger ønsker vi en kopi av ei liste med separate data F.eks kunne endre på kopien uten å ødelegge de originale dataene Ulike måter å få til dette på Slicing, konkatenering med tom liste, eller funksjonen list( ) Bruke funksjonene copy.copy() eller copy.deepcopy( ) 21

2D-lister og kopiering For 2D (og flerdimensjonale lister) blir kopiering mer komplekst Hvert element i ytre liste er igjen en referanse til ei indre liste De enkle triksene med [:], [] + eller list( ) funker derfor ikke Må eventuelt gå i løkke og gjøre dette for hver innerste liste Enklere da: bruke copy.deepcopy( ) Opprettelse av nullmatrise For å lage en nullvektor: V = [0] * 3 # f.eks Funker dårlig for 2D og mer M = [ [0] * 3 ] * 2 Gir 2 rader med 3 kol. 0 er Begge rader er samme data Bruk heller: M = [ [ 0 for k in range(3) ] for r in range(2) ] 22