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

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

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

Oppsummering fra sist

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.

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

Python: Lister og tupler Gaddis: Kapittel 7

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

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

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

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

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.

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

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

Læringsmål og pensum. Oversikt

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

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

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

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

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

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

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

TDT4110 IT Grunnkurs Høst 2015

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

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

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

Læringsmål og pensum. v=nkiu9yen5nc

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

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

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

Tirsdag 21/11. Onsdag 24/11. Tirsdag 12/12. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case

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

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

Bruk piazza for å få rask hjelp til alles nytte!

Python: Strenger 3. utgave: Kapittel 8

TDT4110 IT Grunnkurs Høst 2016

Øvingsforelesning 5 Python (TDT4110)

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

Øvingsforelesning 5 Python (TDT4110)

Kap 2: Løkker og lister

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

TDT4110 IT Grunnkurs Høst 2016

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september

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

Excited. Hvordan komme i gang med tekstbasert programmering? Centre for Excellent IT Education. Guttorm Sindre

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab

Løse reelle problemer

IN uke 1. Komme i gang med programmering

Mattespill Nybegynner Python PDF

Repetisjon Novice Videregående Python PDF

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

TDT4110 Informasjonsteknologi grunnkurs: Programmering: En større case. Professor Alf Inge Wang

Læringsmål og pensum. En større case. Mål Lære å lage større og sammensatte programmer Pensum Kapitlene 1-9 og 12.

Øvingsforelesning 1 Python (TDT4110)

INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

Pensum: Starting out with Python

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case. Terje Rydland - IDI/NTNU. Lære å lage større og sammensatte programmer

Python: Filer og unntak Gaddis: Kapittel 6

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

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

IN uke 1. Komme i gang med programmering

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

Leksjon 3. Kontrollstrukturer

Løkker og arrayer. Løse problemer med programmering. INF1000, uke3 Geir Kjetil Sandve

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre, anders}@idi.ntnu.

TDT4110 Informasjonsteknologi grunnkurs: Tema: Funksjoner med retur og moduler Utgave 3: Kap

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

Læringsmål og pensum. Designe et program

Øvingsforelesning 3 Python (TDT4110)

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

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Oppgaver uke 1: Løsningsforslag

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre,

TDT4110 IT Grunnkurs Høst 2014

TDT4105 Informasjonsteknologi, grunnkurs. Matlab 5: Løkker (FOR og WHILE) Matlab 6: Problemløsning / Algoritmer

Forkurs i informatikk Python. Andreas Færøvig Olsen

MAT1030 Diskret Matematikk

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

TDT4105 Informasjonsteknologi, grunnkurs. Matlab 5: Løkker (FOR og WHILE) Matlab 6: Problemløsning / Algoritmer

Leksjon 3. Kontrollstrukturer

UNIVERSITETET I OSLO

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

Hvordan løse problemer med programmering?

Løse reelle problemer

MAT1030 Plenumsregning 1

Et lite oppdrag i bakgrunnen

Leksjon 3. Kontrollstrukturer

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

Oppgave 1 Hva tror du følgende program skriver ut til terminalen? Diskuter med gruppen.

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

Informasjon Prøveeksamen i IN1000 høsten 2018

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

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030

INF1000 (Uke 4) Mer om forgreninger, While-løkker

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

Transkript:

Python: Løkker TDT4110 IT Grunnkurs Professor Guttorm Sindre

Denne uka Vi trenger å Støttes av Hente data fra bruker Vise data til bruker Lagre data i minnet for bruk videre i programmet Fra tastatur: input() Tekst til skjerm: print() m.m. Variable, enkle datatyper: Heltall, flyttall, strenger, sannhetsverdier Lagre data permanent (og hente) Tekstfiler Binærfiler Andre former for input Andre former for output sammensatte datatyper: Lister, tupler, mengder, dictionary, objekter / klasser Prosessere data Operatorer =, += +, -, * >, ==, Bestemme hvilke programsetninger som utføres, og hvor mange ganger Valg Repetisjoner Kontrollstruktur standard sekvens if-setning løkker (while, for) Innebygde funksjoner og metoder Kontrollstruktur Unntaksbehandling Rekursjon Gjøre programmet forståelig Bryte ned problemet i deler Oppnå fleksibilitet og gjenbrukbarhet Kommentarer Funksjoner Moduler Objektorientert design Klasser og arv Forstå hva vi har gjort feil Feilmeldinger Debugging 2

Læringsmål og pensum Mål Forstå løkker i programmering Kjenne to ulike typer løkker (while, for) Velge løkke avhengig av behov Forstå hvordan de virker Kunne programmere løkker som fungerer Enkle løkker. kompliserte nøstede løkker Pensum Starting out with Python: Chapter 4 Repetition Structures 3

Løkker - gjenta kodelinjer HVORFOR: repetere handlinger Men hvorfor ikke bare kopiere kodelinjer i stedet? (jfr. Excel) KODE: trekant_3_alternativ.py 4

Løkker - gjenta kodelinjer HVORFOR: repetere handlinger Men hvorfor ikke bare kopiere kodelinjer i stedet? (jfr. Excel) 1 5

Løkker - gjenta kodelinjer HVORFOR: repetere handlinger Men hvorfor ikke bare kopiere kodelinjer i stedet? (jfr. Excel) 6

Typisk bruk av ulike løkker for-løkke: kjent antall repetisjoner fast antall, eller kjent (max.) antall når løkka starter Eksempel: samme operasjon på alle elementer i en tabell eller liste alle tall i et intervall eller en tallrekke while-løkke: også ukjent antall repetisjoner, f.eks inntil brukeren ønsker å avslutte inntil et mål er nådd, f.eks.: Beregninger: Til svaret er nøyaktig nok Kontroll/styringssystemer: Til en ønsket tilstand er nådd Søking: Til ønskede data er funnet Spill: Til noen har vunnet 7

Trekant med while 0 antall = 0 antall = 0 while antall < 3: forward(200) left(120) antall = antall + 1 1 antall < 3? True 2 Tegn strek 3 Vri 120 grader 4 antall = 0 + 1 (dvs. 1) 5 antall < 3? True 6 Tegn strek 7 Vri 120 grader 8 antall = 1 + 1 (dvs. 2) 9 antall < 3? True 10 Tegn strek 11 Vri 120 grader 12 antall = 2 + 1 (dvs. 3) 13 antall < 3? False 1 8

Oppsett av while-løkke (kap 4.2) while betingelse: kodelinje1 kodelinje2 kodelinje3 Minner om if: Kun kode med innrykk hører til løkka hvis betingelse er True blir linjer med innrykk utført hvis betingelse er False blir de ikke utført kodelinje3 gjøres etter løkka, uansett I motsetning til if: Kodelinje1 og 2 gjentas inntil betingelse blir False null eller flere ganger Hvis betingelsen aldri blir False: evig løkke Bruk Ctrl-C for å avslutte programmet 9

Trekant med for Lager tallsekvensen 0, 1, 2 for antall in range(3): forward(200) left(120) 1 antall = 0 (første tall i sekvensen) 2 Tegn strek 3 Vri 120 grader 4 antall = 1 5 Tegn strek 6 Vri 120 grader 7 antall = 2 8 Tegn strek 9 Vri 120 grader 10 Hele sekvensen 0,1,2 er gjennomløpt, løkka er ferdig 10

for-løkker (kap. 4.3, 4.4) Gjenta ei kodeblokk et kjent / begrenset antall ganger Gå gjennom en sekvens, element for element Generelt format: for variabel in sekvens: kodelinjer sekvens kan være En sammensatt dataverdi (f.eks. liste, tuppel, mengde, ) Gitt direkte, f.eks. [0, 1, 2, 3] ; [,,, ] ; [ A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K ] Eller i en variabel, f.eks. kortfarger eller kortverdier En tekststreng Et range()-objekt variabel får verdier Første runde: variabel = første element i sekvensen Andre runde: variabel = andre element i sekvensen Siste runde: variabel = siste element i sekvensen KODE: kortstokk.py Hvis sekvensen er tom hopper vi forbi løkka uten å utføre den 11

Bruk av range-objekter (kap 4.4) Et range-objekt husker en sekvens av tall Lagrer ikke alle tallene bare startverdi, sluttverdi og stegverdi sparer plass for lange tallrekker Opprettes ved range() range() kan ta ett, to eller tre argumenter Ett argument: tolkes som sluttverdi Start default 0, steg default 1, siste element blir sluttverdi - 1 To argumenter: Tolkes som startverdi, sluttverdi Tre argumenter: startverdi, sluttverdi, stegverdi NB: alle må være heltall (int) Illustrasjon: range(8) # start: 0, slutt: 8, sekvensen blir 0, 1, 2, 3, 4, 5, 6, 7 range(2, 8) # sekvensen blir 2, 3, 4, 5, 6, 7 range(3, 20, 4) # sekvensen blir 3, 7, 11, 15, 19 range(21, 5, -3) # sekvensen blir 21, 18, 15, 12, 9, 6 12

Oppgaver LETTERE: La brukeren gi ønsket antall vers, skriv hele teksten til «Fiskebollen lever i havet» på skjermen. Eks. kjøring: Antall vers? 3 Fiskebollen lever i havet. Havet er fiskebollens venn. Det var det 1. verset. Nå er det bare 2 igjen. Fiskebollen lever i havet. Havet er fiskebollens venn. Det var det 2. verset. Nå er det bare 1 igjen. Fiskebollen lever i havet. Havet er fiskebollens venn. Det var det 3. verset. Nå er det bare 0 igjen. Lag en versjon med for og en med while. Ufullstendig startkode på fiskebollen_v0.py MIDDELS: (a) Lag et program som lar bruker gi inn 10 flyttall fra tastatur (ett og ett). Så skal programmet skrive ut summen og produktet av tallene. (b) I stedet for akkurat 10 flyttall, motta et vilkårlig antall positive flyttall, avslutt hvis bruker gir et negativt tall. Fortell da hva som var det største tallet som ble skrevet inn. Ufullstendig startkode på tallrekke_v0.py VANSKELIG: Lag et program som leser inn et positivt heltall fra bruker via tastatur, og skriver ut på skjerm tallets faktorisering i primtall. F.eks., Jeg kan faktorisere. Gi meg et heltall? 40 40 er 2*2*2*5 Ufullstendig start: faktorisering_v0.py 13

Løsning på oppgaver Lettere : skal skrive (hvis bruker sa 100):...det 1. verset...99 igjen....det 2. verset...98 igjen.......det 100. verset...0 igjen. Hvordan tenke her? Gjenta utskrift N ganger: LØKKE Antall gjentak kjent: for-løkke enklest antall vers fra input() variabel ant_vers Hva med løkke for vers in range(ant_vers):? Gir tallserien (i) 0, 1, 2,, ant_vers 1 Trenger (ii) 1, 2, 3,, ant_vers (nr på verset) og (iii) ant_vers 1, ant_vers 2,, 1, 0 (antall igjen) Kan vi oppnå (ii) og (iii) fra (i) samt andre data vi har? Ja! (vers + 1 gir nr, ant_vers vers 1 gir gjenstående) Eller skrive for vers in range(1, ant_vers + 1), da blir de to andre» vers og ant_vers vers Løsning: fiskebolle.py 14

Løsning på oppgaver (2) Middels : A) lese 10 tall fra tastatur, fortelle summen og produktet Hvordan tenke her? Gjenta lesing av tall 10 ganger: Løsning er løkke Kjent antall gjentak: for-løkke passer, for i in range(10): vil kjøre 10 runder Hvilke variable trenger vi? En for tallet som leses inn, en for summen, en for produktet Trenger IKKE lage 10 forskjellige variable eller liste for å huske alle innleste tall etterpå, dette er ikke bedt om Typisk oppsamlingsproblem (gradvis samle et resultat ved utførelse av løkke). Felles for slike problem Oppsamlingsvariable må opprettes FØR løkka» For en sum er riktig startverdi 0, for produkt 1 oppdateres i hver runde av løkka» Addere inn / multiplisere inn det neste tallet og leveres (her skrives ut) etter at løkka er ferdig B) lese vilkårlig antall tall fra tastatur, inntil negativt tall blir gitt. Fortelle maksimum Hvordan tenke her? Antall repetisjoner er vilkårlig: while-løkke Oppsamling: finne maksimum, for hver runde sjekke om nytt tall er større Trenger en variabel for det hittil største tallet if-setning hvor denne variabelen endres hvis nytt tall var større beste startverdi det første tallet, variabelen må opprettes før løkka Løsning: tallrekke.py 15

Løsning på oppgaver (3) Vanskelig : Skrive ut primtallsfaktoriseringen av et innlest heltall x, f.eks 19 er 19 6 er 2 * 3 40 er 2 * 2 * 2 * 5 Hvordan tenke her? Prøve ett og ett tall, finne ut om det er en faktor (x % divisor == 0) Hvis faktor funnet, dele tallet på faktoren (x = x // divisor ) Så vi vet resten som fortsatt gjenstår å faktorisere Hvordan vite at vi skal slutte? Når x er blitt 1 Samme tall kan være faktor flere ganger. Må prøve om igjen til det ikke lenger er faktor Dette blir en dobbel løkkekonstruksjon: Ytre løkke: prøve økende divisorer 2, 3, 4, 5, 6, 7, så lenge x > 1 Indre løkke: prøve samme divisor gjentatte ganger, så lenge x % divisor == 0 Med tanke på genereringen av tekststrengen som skal bli svaret, er dette et typisk oppsamlingsproblem Gi den en startverdi før løkka (f.eks 40 = ) I løkka: legge til hver faktor vi finner bakerst i strengen, samt * unntatt for aller siste faktor Printe strengen som løsning etter at løkka er slutt Løsning: faktorisering.py 16

Endring av verdier i variable Kompakte former (kap 4.5) Lang-form Kompakt-form Hva gjøres x = x + 4 x += 4 Øker verdien av x med 4 x = x - 3 x -= 3 Minsker verdien av x med 3 x = x * 10 x *= 10 Multipliserer verdien av x med 10 x = x / 2 x /= 2 Dividerer verdien av x med 2 x = x % 4 x %= 4 Resten av x delt på 4 Dette kan brukes også ellers i koden, ikke bare i løkker. Men er særlig relevant i løkker. 17

Validering av input vha løkker (4.6) Brukere kan gi feil input Med vilje Tastefeil Misforståelser Må sjekke input før programmet går videre Evt. også tvinge brukeren til korrekt input Dette kan man gjøre vha while-løkke: alder = input("hvor gammel er du? ") while not alder.isdigit() or int(alder) < 0 or int(alder) > 150: print("feil: Alder må være et heltall mellom 0 og 150!") alder = input("hvor gammel er du? ") print("takk for den du!! ") alder = int(alder) kode: alder.py 18

Nøstede løkker (kap 4.7) Løkke inni annen løkke kalles nøstede løkker. Nyttig i mange situasjoner Hierarkiske strukturer Tabeller, matriser Tid er et godt eksempel teller først 60 sekunder, øker minutt med 1 osv Utskrift av tid som nøstede løkker: for t in range(24): for m in range(60): for s in range(60): kode: tid.py print(t,":",m,":",s) 19

Oppsummering while-løkke: en betingelse avgjør antall iterasjoner: while (betingelse): setning(er) Setningene utføres så lenge betingelse er True for-løkke brukes for et bestemt antall iterasjoner F.eks. gjøre noe for alle elementer i ei liste eller intervall for x in [1, 2, 3, 4]: for y in [ test, 3.14, True, 9]: for i in range(1, 5): for z in range(1, 9, 2): Nøstede løkker er løkker inni andre løkker: for x in [1, 3, 5]: for y in range [5, 7, 12]:... 20