Introduksjon til øvingsopplegget og gjennomgang av Python

Like dokumenter
TDT4120 Øvingsforelesning 1 Introduksjon til Python

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

Øvingsforelesning 3 Python (TDT4110)

Øvingsforelesning 5 Python (TDT4110)

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Øvingsforelesning 5 Python (TDT4110)

Øvingsforelesning 1 Python (TDT4110)

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

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

Løse reelle problemer

Øvingsforelesning 9 i Python (TDT4110)

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

INF1000 Eksamen 2014 (modifisert)

TDT4110 IT Grunnkurs Høst 2015

Programmeringsspråket C

Programmering Høst 2017

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

UNIVERSITETET I OSLO

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver - LF. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

INF1000 Eksamen 2014 (modifisert)

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Øvingsforelesning 7 i Python (TDT4110)

INF Uke 10. Ukesoppgaver oktober 2012

Magnus Moan (Undertegnede) Enkle datastrukturer, trær, traversering og rekursjon

Java-kurs. Andreas Knudsen Nils Grimsmo 9th October 2003

Øvingsforelesning i Python (TDT4110)

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

Eksamensoppgaver 2014

Øvingsforelesning i Python (TDT4110)

Informasjon Prøveeksamen i IN1000 høsten 2018

Informasjon Eksamen i IN1000 høsten 2017

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Praktisk informasjon. Repetisjon: While-løkker. I dag. INF1000 (Uke 5) Mer om løkker, arrayer og metoder. Oblig 2 er lagt ut

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

TOD063 Datastrukturer og algoritmer

Seminaroppgaver IN1010, uke 2

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Del 3: Evaluere uttrykk

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Kapittel 9: Sortering og søking Kort versjon

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

UNIVERSITETET I OSLO

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

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

INF2820 Datalingvistikk V2016. Jan Tore Lønning

Håndtere mange verdier

Øvingsforelesning i Matlab (TDT4105)

IN1010 våren januar. Objektorientering i Java

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

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

INF 1000 høsten 2011 Uke september

IN uke 2. Presis forståelse av programmering

INF1000 undervisningen INF 1000 høsten 2011 Uke september

UNIVERSITETET I OSLO

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

Kapittel 1 En oversikt over C-språket

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

Objektorientert programmering i Python

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

INF1000: Forelesning 7

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

UNIVERSITETET I OSLO

Innhold uke 9. Objektorientert programmering i Python. Om ukens pensum. Referanser og objekter Tema: Mer komplekse strukturer

TDT4100 Objektorientert programmering

IN1140, H2018 gruppetime oppgaver Introduksjon til Tekst i Python

Kap 2: Løkker og lister

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

TDT4110 IT Grunnkurs Høst 2016

Finne ut om en løsning er helt riktig og korrigere ved behov

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

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

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

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

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

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

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

Hvordan løse problemer med programmering?

Løse reelle problemer

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Oblig 4Hybelhus litt mer tips enn i oppgaven

Feilmeldinger, brukerinput og kontrollflyt

INF1010 våren januar. Objektorientering i Java

IN1000 Obligatorisk innlevering 7

Finne ut om en løsning er helt riktig og korrigere ved behov

Longest. increasing. subsequence. Betingelser. Matrise- common. Grådig vs. DP. Forside. Intro. Fibonacci-tall. Memoisering DP

INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

Datastrukturer. Algoritmer og datastrukturer. Øvingsforelesning 2

UNIVERSITETET I OSLO

INF1000 (Uke 6) Mer om metoder, tekster

INF1000: Forelesning 7. Konstruktører Static

Stack. En enkel, lineær datastruktur

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

INF120: Oblig 3. Yngve Mardal Moe

Transkript:

1 Introduksjon til øvingsopplegget og gjennomgang av Python Aleksander Vognild Burkow (Undertegnede) Skamløst stjålet og modifisert til det ugjenkjennelige av Mikkel Antonsen algdat@idi.ntnu.no Introduksjon til øvingsopplegget og gjennomgang av python

2 Kort om faget Tung eksamen og pensum Jobb jevnt og trutt Undervisning Hovedforelesninger (Magnus Lie Hetland) Øvingsforelesninger (Undassene) Saltid (Studassene) Forberedelse til eksamen Tidligere eksamener Øvinger Cormen (Boka)

3 Undassene Spør oss om hjelp! Aller helst, piazza! På Mail (algdat@idi.ntnu.no) Etter forelesning / i pauser Øvingsforelesninger Si i fra om vanskelighetsgraden blir for lav / høy Si til oss hva dere synes er vanskelig

4 Studassene Saltider finner du på piazza Hjelper med øvinger, eksamen, livet Vil også i år ha ballonger

5 Øvingsopplegget Teori og praksisøvinger 13 øvinger (2 bolker) Minimum 300 poeng på hver øving Teori, fart, og korrekthetspoeng Programmeringsspråk Rammeverk, innlevering Korrekt løsning => hacky løsning Relevans på eksamen

6 Gjennomgang av innlevering http://www.idi.ntnu.no/~algdat/ Last ned rammeverk Løs for testinput

7 Teoriøvingen Veldig grunnleggende spørsmål Én oppgave som er utfordrende (finn algoritmen)

8 Øvingsforelesninger Hva gjennomgås Forrige ukes teori- og praksisøvinger Teori til neste uke Kikk på neste ukes øvinger Denne forelesningen Grunnleggende python Avansert python og triks Gjennomgang av innlevering av øving Gjennomgang av neste ukes øving

9 Triks for ytelse Caching av funksjoner stdin.readline() vs readline = stdin.readline Lagring av utregnede verdier Kjøretid på lister, bruk korrekte datatyper Bruk dictionaries der det er mulig

10 Funksjonell programmering Lambda-funksjoner Lambda x: x**2 Map map(int, [x for x in sys.stdin]) Reduce map (lambda a,b: a*b, [1,2,3]) Filter filter(lambda x: x<10, range(20)) Eksempel: column_row_sum.py

11 Eksempler Prinsesser.py Pipesortering.py Rhatatosk.py vs rhackataosk.py Sprengstoff.py vs hackstoff.py

12 Introduksjon til python (2.7.x) Enkel syntaks, fokus på algoritmer Kompilert vs tolket språk Oversettes på runtime Feil oppdages på runtime Treigt Dynamisk typing Typer til variabler evalueres ikke før de trengs Kan godt endre seg Basert på Åsmunds foiler fra 2008 http://www.idi.ntnu.no/emner/tdt4120/notater/2008/2008-08-22- algdat-python.ppt

13 Hello world i java public class HelloWorld { public static void main(string[] args) { System.out.println("Hello world!"); } }

14 Hello world i python Print 'hello world!'

15 Syntaks Indentering og linjeskift, ikke krøllparenteser Kan importere krøllparanteser (from future import braces) Avgjør også blokker Vær konsekvent med valg av mellomrom eller tab Ingen semikolon Kommentarer startes med #

16 Utskrift til skjermen print x skriver ut verdien av x etterfulgt av linjeskift print a, b, c skriver ut a, b og c med mellomrom imellom på samme linje, etterfulgt av linjeskift print a, b, c, gjør det samme uten å lage linjeskift etterpå hvis du vil unngå mellomrommene, kan du bygge en string av dataene og skrive den ut: print str(a) + str(b) + str(c) print skriver også ut lister på en fin måte

17 Datastrukturer Strings Integers, Floats, Booleans Tuples Lists Dictionaries

18 Strings Rammes inn med " eller ' (ingen forskjell) Tegn kan escapes på samme måte som i Java (\", \', \n, \t osv.) Strings er immutable, så alle "endringer" oppretter i virkeligheten en ny string streng = 'Hello verden!'

19 Integere, Floats, Booleans a = 2 # a er en integer a = 2.0 # nå er a en float a, b = int('2'), float('2.0') # a er integer, b er float algdat_er_fett = True # merk, stor bokstav på True algdat_er_stress = False

20 Tuples En slags list som ikke kan endres etter at det er opprettet Kjekt for å returnere mer enn én verdi fra en funksjon def minandmaxfromsorted(list): min = list[0] max = list[-1] return (min, max) Pakke ut tupler min, max = minandmaxfromsorted([1,2,3])

21 Lists Som array i Java 0-indekserte Kan inneholde hva som helst Opprette tom liste: list = [] Opprette utfylt liste: list = [a, b, c,...] Endre element: list[index] = element Hente element: list[index] Finne lengde: len(list) Koble på en annen liste: lista.extend(listb)

22 Lists Legge til et element bakerst: list.append(element) Hvis element er en liste, vil hele listen bli satt inn som ett element Legge til et element på en bestemt plass (ineffektivt): list.insert(index, element) Lese og fjerne element bakerst: lst.pop() Lese og fjerne element på en bestemt plass: list.pop(index) Finne indeksen til første forekomst av et bestemt element list.index(element) Fjerne første forekomst av et bestemt element list.remove(element) Kjøretid

23 Dictionaries Brukes for å knytte nøkler til verdier Kan ses på som et array der indeksene kan være hva som helst Implementert som hashmaps Består egentlig av et array. Ut fra nøkkelen beregnes plasseringen i arrayet. Virkemåten til hashmaps dekkes senere i faget.

24 Dictionaries Opprette tomt dictionary: dict = {} Opprette utfylt dictionary: dict = {key1 : value1, key2 : value2,...} Lagring av verdi: dict[key] = value Henting av verdi: dict[key] (vil krasje om key ikke finnes) Sjekke om nøkkel finnes: if key in dict: Iterere gjennom verdier: for v in dict.values(): Iterere gjennom nøkler: for k in dict.keys(): eller bare for k in dict:

25 Kontrollflyt if, if elif, if elif else for, while list comprehensions

26 if-setninger Fungerer på samme måte som i Java, unntatt... Trenger ikke parenteser rundt uttrykkene elif i stedet for else if Støtter sammenligninger av mer enn to operander på en gang Java: if (a < b && b == c && c <= d && d < e) Python: if a < b == c <= d < e: if a < b: pass elif b > a: else: pass pass

27 if-setninger 0, [], "" og None tolkes som False; alt annet tolkes som True Boolske operatorer er annerledes Java: &&,,! Python: and, or, not and og or er kortsluttet, akkurat som i Java (hvis mulig, evalueres bare venstresiden) if a<b and b==42: pass

28 for-løkker og iterasjon Vi kan ikke lage for-løkker i Java/C-stil Vi kan kun iterere over lister, dvs. gå gjennom alle elementer i en liste Syntaks: for element in list: Løkken vil kjøre like mange ganger som det er elementer i listen, og hver gang vil element ha verdien til tilsvarende element i listen for e in [0, 42, "hei", [1, 2, 3]]: print e

29 for-løkker og iterasjon Hvis vi ønsker en "vanlig" for-løkke, kan vi bruke range() til å lage en liste med heltall Tre utgaver: range(end) [0, 1, 2,..., end - 1] range(start, end) [start, start + 1,..., end - 1] range(start, end, step) [start, start + step,..., start + x * step] slutter på den siste verdien som er mindre enn end, eller siste verdi som er større enn end hvis step er negativ

30 for-løkker og iterasjon Iterasjon over elementene i en liste gjør man altså slik: list = [1, 5, 2, 8, 9] for elmt in list: print elmt Du kan da ikke finne indeksene ut fra elementene! Iterasjon over indeksene gjør man slik: for index, elmt in enumerate(list): print index, ":", elmt

31 for-løkker og iterasjon Jeg vil bare iterere over alle tall på intervallet [x, y) Bruk range(x,y) for index in range(1, 10): print i # printer 1 til og med 9 for index in range(10): print i # printer 0 til og med 9 For fart, bruk xrange(10). Nesten identisk, men raskere.

32 continue, break og else continue hopper til neste iterasjon av den innerste for- eller while-løkka break avbryter den innerste for- eller while-løkka Man kan plassere en else-blokk etter en for- eller while-løkke Den burde egentlig hete 'if no break:', men den heter 'else:' for i in range(2): else: pass print 'No breaks happened!'

33 List comprehensions Er som for-løkker, bare penere. La integere = [1,42,23,15,61,41] Vil ha en liste med floats istedenfor floats = [float(elmt) for elmt in integere] Vil ha alle tall mindre enn 23 less_than_23 = [elmt for elmt in integere if elmt < 23] Uante muligheter for gøy og spenning med list comprehensions

34 Funksjoner Funksjoner defineres med def Returtype og argumenttyper spesifiseres ikke, så man kan i utgangspunktet sende hva som helst når man bruker funksjonen (men det er sjelden lurt) def printarguments(a, b): print a print b Hvis man ikke returnerer noe selv, returneres None (tilsvarer null i Java) Lambda-funksjoner (anonyme)

35 Funksjoner Alle parametre sendes som referanser det er altså trygt å sende lister og store objekter Tall og strings er immutable (de kan ikke endres) Lister, dictionaries, egendefinerte objekter og det meste annet er mutable

36 Funksjoner Lokale variabler (function scope) x = 5 def foo(a) x = a # Dette er IKKE den samme x'en! Trenger du å bruke en global variabel x på den måten, må du skrive global x øverst i funksjonen

37 Noen kjekke funksjoner 'Dette:er:en:streng'.split(':') Evaluerer til ['Dette', 'er', 'en', 'streng'] a = 'Dette:er:en:streng' a.split(':') # a er uforandret! a = a.split(':') # a er nå en liste La a = ' dat strip ' a = a.strip() # a er nå 'dat strip' Fjerner mellomrom fra begge ender

38 Input Bruker som regel stdin.readline(), som leser inn en linje som en string Må skrive from sys import stdin øverst i programmet

39 Input Kan også bruke raw_input() Input() (raw input med eval) Sys.stdin Typisk å iterere over input for input in stdin: do stuff Kan kombineres med list comprehensions

40 Bruke array som stack bruk append(element) for å pushe på stacken (legger element til på slutten) bruk pop() for å poppe fra stacken (fjerner og returnerer elementet på slutten)

41 Bruke array som queue pop(0) fjerner det første elementet Men dette er ineffektivt, fordi alle de andre elementene må flyttes ett hakk frem

42 Listebehandling Sortere stigende: list.sort() bruk dette gjerne til testing, men ikke bruk det i praksisøvingene! Reversere: list.reverse() Hente ut en delliste: list[start : end] end-elementet blir ikke med list[: end] tilsvarer list[0 : end] list[start :] tilsvarer list[start : len(list)] list[i : i + 1] lager en liste som bare består av element i

43 Listebehandling Hvis man bruker negative tall i [:]-notasjonen angir man da antall elementer fra slutten av lista a[-x : -y] gir fra og med xte siste element til, men ikke med, yende siste element Disse kan godt blandes, f.eks. som a[x : -x], som gir hele lista minus de x første og de x siste

44 Listebehandling Elegant generering av lister: list = [listelement for element in list if condition] Tilsvarende kode: resultinglist = [] for element in list: if condition: resultinglist.append(resultingelement) Eksempel: def squareroots(list): return [sqrt(x) for x in list if x >= 0]

45 Quicksort Fancy quicksort-implementasjon (brukt I øvingsløsning I fjor) def s(a): return A if len(a) <= 1 else s([i for i in A if i < A[0]]) + [A[0]] + s([i for i in A if i > A[0]]) Velger første element som pivotelement og genererer en liste med alle tallene som er mindre og en med alle tallene som er større Kjører qsort på de to listene og kombinerer

46 Klasser class classname: variable1 = startvalue1 variable2 = startvalue2... def methoda(self, arg,...)... def methodb(self, arg,...)... Variablene trenger ikke å listes opp på forhånd (men det er lurt å gjøre det!) Vi kommer til å bruke klasser kun for å lagre data, ikke for å gjøre fancy objektorientering

47 Klasser Python sitt svar på this er self self må listes som første parameter i metoder self må alltid brukes når man skal ha tak i objektvariabler Constructoren heter alltid init (to understreker på hver side) Til fysmat og de andre som har lært C++: Python, i likhet med Java, bruker pekere bak kulissene, men eksponerer dem ikke for programmererne. Det finnes derfor ikke noe som tilsvarer C++-operatorene & og *, og. brukes i stedet for ->

48 Eksempelklasse Hentet fra rammeverket til øving 1 - "På sporet av sprengstoff": class Kubbe: vekt = None neste = None def init (self, vekt): self.vekt = vekt self.neste = None

49 Eksempelklasse Tilsvarende klasse i Java: public class Kubbe { int vekt; Kubbe neste; public Kubbe(int vekt) { this.vekt = vekt; this.neste = null; } }

50 Hvordan bruke en klasse kubbe1 = Kubbe(1) kubbe2 = Kubbe(2) print kubbe1.vekt # evalueres til 1 kubbe1.neste = kubbe2 print kubbe1.neste.vekt # evalueres til 2