AlgDat - Øvingsforelesning 1 Introduksjon til Python, lenkede lister og øving 1 Ole Kristian Pedersen, Høst 2016
Agenda Introduksjon til Python for begynnere Intro til øving 1 Litt om lenkede lister Øvingssystemet 2
Python? Enkelt å lese og skrive Dynamisk typet Variabelens type evalueres når det trengs, og typen kan endre seg underveis Python 3.x vs Python 2.7.x Endringer som ikke er bakoverkompatible Bruker i år Python 3 (vs 2 tidligere år) Kommer her bare til å ha en minimal gjennomgang av Python 3
Python vs Java #python print( Hello world! ) //java public class HelloWorld { public static void main(string[] args) { System.out.println( Hello world! ); } } 4
Python: Syntaks Indentering og linjeskift Ikke krøllparanteser og semikolon Kommentarer starter med # 5
Python: utskrift print( Hello, world ) print( Per, Ola, Kari ) # Skriver ut navnene med mellomrom og newline print( Hello,, end= ) print( World ) # Skriver ut Hello, World på samme linje Kan også skrive ut tall, dictionaries og lister. Prøv selv! 6
Python: Nyttige datatyper Strenger Heltall, flyttall, boolske variabler Tupler, lister Dictionaries 7
Python: Strenger og er likeverdige Tegn kan escapes som C++ og Java \, \, \n, \t Strenger er immutable, så alle endringer lager en ny streng -> dyre operasjoner s = Hello, World x = 3 s2 = str(x) # -> 3 8
Python: ints, floats and bools x = 3 y = 9.81 a = int( 3 ) b = float( 2.7 ) t = True f = False 9
Python: Lister Tilsvarende ArrayList (Java) eller vector (C++) 0-indeksert, mutable Kan inneholde ulike datatyper i samme liste l = [] # Tom liste l2 = [ a, b, 1] l3 = [ x ] * 3 # liste med 3 x -strenger l3[2] = z # [ x, x, z ] l2[1] # => b len(l3) # => 3 print(l2) # [ a, b, 1] 10
Python: Lister, forts Legg til elm bakerst i listen lst.append(elm) Legg elementene i lst2 bakerst i lst lst.extend(lst2) Legg til elm på index lst.insert(index, elm) Fjern elementet på index, og returner det lst.pop(index) Finn første forekomst av element lst.index(element) Fjern første forekomst av element lst.remove(element) 11
Python: tupler Som lister, men immutable Kan ikke endre på elementene, eller lengden Greit når man har flere returverdier def getminmax(lst): mn = min(lst) mx = max(lst) return (mn, mx) Utpakking av tupler: mn, mx = getminmax([7, 3, 5]) 12
Python: Dictionaries Nøkler og verdier Nøkler er indekser, og brukes til å finne tilhørende verdi Nøkler må være immutable Implementert som hashmaps (pensum i faget) 13
Python: Dictionaries forts. Tom dictionary: d = {} Med verdier: d = { key1 : value1, (1, 2): tupler kan brukes } Lagring av verdi: d[key] = value Henting av verdi: d[key] (NB! vil krasje om key ikke eksisterer) Sjekk om key eksisterer: if key in d: Iterer over verdier: for v in d.values(): Iterer over nøkler: for k in d: Iterer over nøkler: for k in d.keys(): Iterer over (key, value)-par: for k in d.items(): 14
Python: if-elif-else mn = 0 mx = 9000 x = input() if x < mn: print( Too small ) elif x > mx: print( It s over 9000! ) else: print( Valid number! ) 15
Python: if-elif-else forts. 0, [], {},,, False og None tolkes som False: alt annet tolkes som True Java/C++: &&,,! Python: and, or, not if not a < b and not b < a: print( a == b ) 16
Python: for-løkker Iterator-basert iterasjon Kan iterere over lister, dictionaries, strenger, tupler (og noen spesialobjekter) for element in list: print(element) 17
Python: for-løkker og range range returnerer en liste med heltall Ikke helt sant i Python 3, men ikke så langt unna range(end) # [0, 1,..., end-1] range(start, end) #[start, start+1,, end-1] range(start, end, step) #[start, start+step, ] # skriv ut alle tallene fra 100 til 1 for i in range(100, 0, -1): print(i) 18
Python: continue og break Fungerer som i C++ og Java 19
Python: Funksjoner def add(a, b): return a+b Funksjoner som ikke returnerer noe, returnerer None i Python (C++/Java: void-funksjoner) Alt sendes som referanser, så store objekter kopieres ikke. Tall, strenger og tupler er immutable Lister, dictionaries og objekter er mutable 20
Python: global x = 5 def changex(a): x = a # dette er ikke den samme x-en! # korrekt x = 5 def changex(a): global x x = a # endrer den globale x-en 21
Python: Strengmanipulasjon # Split: 3:5:6.split( : ) #Returnerer [ 3, 5, 6 ] # Strip: a = asfd a = a.strip() # fjerner mellomrom fra endene print(a) # asdf 22
Python: Input from sys import stdin # Hent neste linje fra input linje = stdin.readline() # Kan også iterere over gjenværende linjer for linje in stdin: pass 23
Python: Listeoperasjoner Sortere stigende: list.sort() Sortere synkende: list.sort(reverse=true) Reverse liste: list.reverse() Slicing: lst = [0, 1, 2, 3, 4] print(lst[1:3]) # [1, 2] print(lst[3:] # [3, 4] print(lst[:2] # [0, 1] 24
Python: Klasser class ClassName: def init (self, arg, ): self.var1 = arg1 self.var2 = arg2 def methoda(self, arg, ): # #... 25
Python: Klasser forts. Python: self er tilsvarende this i C++/Java Konstruktøren heter alltid init To understreker på hver side 26
Gjennomgang av øving 1 Praksis: Lenkede lister (Cormen, kap 10.2) algdat.idi.ntnu.no Utdelt rammeverk Trenger ikke tenke på lesing av input [Gjennomgang på tavla] 27
28 Spørsmål?