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.

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.

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

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

Python: Lister og tupler Gaddis: Kapittel 7

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

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

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

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

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

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

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

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.

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.

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

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

Læringsmål og pensum. Oversikt

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

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

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

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

Python: Strenger 3. utgave: Kapittel 8

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

Læringsmål og pensum. v=nkiu9yen5nc

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

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

TDT4110 IT Grunnkurs Høst 2015

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

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

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

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

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

Repetisjon Novice Videregående Python PDF

Python: Funksjoner og moduler Kapittel

Mattespill Nybegynner Python PDF

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

Ta kontakt i pausen. Viktig at vi kommer i gang med dette arbeidet!

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 5 Python (TDT4110)

Kap 2: Løkker og lister

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

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

Øvingsforelesning 5 Python (TDT4110)

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

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

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

Løse reelle problemer

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

TDT4110 IT Grunnkurs Høst 2016

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab

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

Øvingsforelesning 1 Python (TDT4110)

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

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

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

JS: Grunnleggende JavaScript Nybegynner

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

MAT1030 Plenumsregning 1

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

TDT4110 IT Grunnkurs Høst 2014

TDT4110 IT Grunnkurs Høst 2016

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

UNIVERSITETET I OSLO

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

MAT1030 Diskret Matematikk

Python: Filer og unntak Gaddis: Kapittel 6

Leksjon 3. Kontrollstrukturer

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å.

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

Python: Filer og unntak Gaddis: Kapittel 6

Løse reelle problemer

INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

Oppgaver uke 1: Løsningsforslag

Objektorientert programmering i Python

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

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

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

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Pensum: Starting out with Python

Opphavsrett: Forfatter og Stiftelsen TISIP

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

IN uke 1. Komme i gang med programmering

Øvingsforelesning 3 Python (TDT4110)

Transkript:

Python: Løkker TDT4110 IT Grunnkurs Professor Guttorm Sindre

Referansegruppe MTTK: havardmellbye@gmail.com MTMT: Daniel.Vadseth@hotmail.com MTDESIGN 9valinn@gmail.com MTKOM: jonbs@stud.ntnu.no MLREAL: emmapet@stud.ntnu.no BMUST? På tide å ha et møte snart (neste uke?) Begynn gjerne å tenke på relevant input 2

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 Styre hvorvidt og hvor ofte programsetninger utføres Valg Repetisjoner Operatorer =, += +, -, * >, ==, 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 3

Læringsmål og pensum Mål Forstå løkker i programmering Ha kjennskap to ulike typer løkker (while-løkke, for-løkke) Kunne velge type avhengig av behov Praktiske ferdigheter i bruk av while-løkke Praktiske ferdigheter i bruk av for-løkke Pensum Starting out with Python: Chapter 4 Repetition Structures 4

Løkker - gjenta kodelinjer HVORFOR: repetere handlinger Uten at vi må skrive / kopiere kodelinjer mange ganger Jfr. kopiering av formler, vanlig teknikk i regneark Repetisjoner i programmering: to teknikker Løkker (i dag) Rekursjon (mot slutten av semesteret) Løkker i Python: to typer while-løkke kan brukes på alle slags løkkeproblemer for-løkke ofte enklere for problemer hvor den passer Ordet løkke brukes fordi vi skal gjenta noe flere ganger (rundt og rundt) 5

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 6

EKS.: Kopiering vs. while vs. for Vil tegne et kvadrat på skjermen Pythons standardbibliotek mangler funksjoner for tegning print() skriver bare tekst/tall til skjerm Må importere et tegnebibliotek, f.eks. turtle KODE: kvadrat_v0.py 7

Forklaring av den repetitive delen 1. Tegner 2. Vrir 3. Tegner 4. Vrir 5. Tegner 6. Vrir 7. Tegner 8. Vrir 8 6 7 1 2 3 4 5 Funker, men Hva er problemet med kopiering? 8

Samme med while antall = 0 while antall < 4: turtle.forward(300) turtle.right(90) antall = antall + 1 Fordeler vs. kopiering? 0 antall = 0 1 antall < 4? True 2 Tegn strek 3 Vri 90 grader 4 antall = 1 5 antall < 4? True 6 Tegn strek 7 Vri 90 grader 8 antall = 2 9 antall < 4? True 10 Tegn strek 11 Vri 90 grader 12 antall = 3 13 antall < 4? True 14 Tegn strek 15 Vri 90 grader 16 antall = 4 17 antall < 4? False 14 11 2 3 6 7 10 KODE: kvadrat_while.py 9

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 inntrykk 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 (if: null eller én gang) Hvis betingelsen aldri blir False: evig løkke Bruk Ctrl-C for å avslutte programmet 10

Samme med for Lager tallsekvensen 0, 1, 2, 3 1 antall = 0 (første tall i sekvensen) 2 Tegn strek 12 2 3 3 Vri 90 grader 4 antall = 1 for antall in range(4): turtle.forward(300) 5 Tegn strek 6 Vri 90 grader 11 5 turtle.right(90) 7 antall = 2 8 Tegn strek Fordeler vs. while? 9 Vri 90 grader 10 antall = 3 11 Tegn strek 9 8 6 12 Vri 90 grader 13 Hele sekvensen 0,1,2,3 er gjennomløpt, løkka er ferdig KODE: kvadrat_for.py 11

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 Hvis sekvensen er tom hopper vi forbi løkka KODE: kortstokk.py 12

Fordeler med løkker vs. kopiering Kort kode selv med mange repetisjoner Fleksibilitet: Antall repetisjoner kan kontrolleres med variable Eksemplet: kort vei til at bruker kan velge hva som tegnes Variabel for repetisjoner (ikke mulig m kopi) polygon_for.py Variable for kantlengde og vinkel (også mulig i kopi-eksemplet) 13

Mer eksempler Dette er bare løkkedelen av programmet. Hele fins i fila polygonspiral_while.py Hele på fila mandala_for.py 14

Oppgaver LETTERE: Lag et program som skriver barnesangen Fiskebollen lever i havet. Les inn ønsket antall vers fra brukeren og skriv hele teksten på skjermen. F.eks. bruker velger 100:.Det var det 1. verset, nå er det bare 99 igjen (div. vers ) Det var det 100. verset, nå er det bare 0 igjen Prøv å få til en versjon med for og en med while. Ufullstendig startkode på fiskebollen_v0.py MIDDELS: (a) Lag et program som leser inn 10 flyttall fra tastatur (ett og ett). Deretter skal programmet skrive ut summen og produktet av tallene. (b) i stedet for akkurat 10 flyttall, les inn 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., 33 = 3*11 40 = 2*2*2*5 Ufullstendig start: faktorisering_v0.py 15

Bruk av range-objekter (kap 4.4) Et range-objekt husker en sekvens av tall Lagrer ikke alle tallene bare startverdi, sluttverdi og stegverdi (hvis ulik 1) Dette sparer plass for lange tallrekker Opprettes ved et kall til konstruktørmetoden 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 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): print(t,":",m,":",s) kode: tid.py 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, 5, 2): Nøstede løkker er løkker inne i andre løkker: for x in [1, 3, 5]: for y in range [5, 7, 12]:... 20