Hösten 2009
Dagens lektion Ett programmeringsspråks byggstenar Några inbyggda datatyper Styra instruktionsflödet Modulen sys 2
Ett programmeringsspråks byggstenar 3
ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR Datatyper Data av olika typ kräver olika representation heltal decimaltal (flyttal) tecken text listor mängder strängindexerade fält Inbyggda datatyper Egendefinierade datatyper 4
ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR Satser (kontrollstrukturer) Styr flöde av instruktioner Villkorade satser Upprepade satser Finns vanligtvis i flera anpassade varianter 5
ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR Funktioner och moduler Funktioner Samlar instruktioner som kan anropas från olika delar av ett program Identiska block av kod behöver inte skrivas flera gånger Moduler Samlar funktioner som är relaterade Ger bättre organisation av stora program Kan återanvändas i flera program 6
Några inbyggda datatyper 7
NÅGRA INBYGGDA DATATYPER Fyra sätt att representera tal heltal (int) Skrivs som t.ex. 7 stora heltal (long) Skrivs som t.ex. 467L decimaltal/flyttal (float) Skrivs som t.ex. 4.27 eller 7.0 komplexa tal (complex) 8
NÅGRA INBYGGDA DATATYPER Varför skilja mellan heltal och flyttal Begränsad lagringsutrymme begränsad noggrannhet Decimaltal kan inte lagras exakt Oftast inget problem Alla decimaltal kan ej lagras exakt med flyttal 9
NÅGRA INBYGGDA DATATYPER Operationer med tal x * y Produkten av x och y x + y Summan av x och y x - y Differensen av x och y x / y Kvoten mellan x och y x // y Heltalskvoten mellan x och y x % y Resten vid heltalsdivision mellan x och y -x Negationen av x abs(x) Absolutvärdet av x pow(x, y) x y, x upphöjt i y x**y Se ovan 10
NÅGRA INBYGGDA DATATYPER Konvertering av tal int(x) long(x) float(x) x konverterat till heltal x konverterat till stort heltal x konverterat till flyttal 11
NÅGRA INBYGGDA DATATYPER Matematiska funktioner ceil(x) floor(x) sqrt(x) sin(x) cos(x) tan(x) pi Minsta heltal som är större än x Största heltal som är mindre än x x sinus av x cosinus av x tangens av x π 12
NÅGRA INBYGGDA DATATYPER Division av heltal Ett heltal kan aldrig innehålla decimaler Vid division av två heltal kan inte resultat innehålla decimaler >>> 4 / 2 2 >>> 5 / 2 2 Avrundas till närmast mindre heltal >>> -5/2-3 13
NÅGRA INBYGGDA DATATYPER Automatisk konvertering Är minst ett av operanderna ett flyttal blir resultatet ett flyttal >>> 4 / 2.0 2.0 >>> 5 / 2.0 2.5 Krävs flyttalsdivision använd konvertering >>> 5 / float(2) 2.5 OBS!!! >>> float(5 / 2) 2.0 14
NÅGRA INBYGGDA DATATYPER Boolska värden Kan uttryckas som sant eller falskt Finns definierat som True och False Jämförelseoperationer x == y Likhet (x ekvivalent med y) x!= y Olikhet (x inte ekvivalent med y) x < y x strikt mindre än y x > y x strikt större än y x <= y x mindre eller lika med y x >= y x större eller lika med y not Negerar efterföljande boolskt värde 15
NÅGRA INBYGGDA DATATYPER Sekvenser Vanligt att värden lagras i en sekvens (given ordning) Flertal sätt att lagra sekvenser i Python Strängar Listor Tupler etc. Första värdet i en sekvens har index 0! 16
NÅGRA INBYGGDA DATATYPER Listor En lista är precis vad det låter som, en sekvens av värden. Listor skapas med hakparenteser. Listor kan innehålla värden av olika datatyper list = [3.0, "Anna", 4] För att hämta värden ur en lista används också hakparenteser item = list[1] list[1] = "Karin" 17
NÅGRA INBYGGDA DATATYPER Tupler En tupel är identisk med en lista, men värden i en tupel kan inte ändras Tupler skapas med parenteser. Tupler kan innehålla värden av olika datatyper tupel = (3.0, "Anna", 4) För att hämta värden ur en tupel används också hakparenteser item = tupel[1] tupel[1] = "Karin" \#FEL!! Kan inte ändra värde 18
Styra instruktionsflödet 19
STYRA INSTRUKTIONSFLÖDET Flöde av instruktioner Ett program exekveras sats för sats Man vill kunna villkora eller repetera vissa satser 20
STYRA INSTRUKTIONSFLÖDET Indentering och kodblock Schematisk kan satserna i ett program delas upp i mindre delar som utförs i grupp, kodblock Ett kodblock utförs oftast i sin helhet eller inte alls Kodblock kan uttryckas på olika sätt i olika språk (begin... end,..., etc.) I Python anges ett kodblock med indentering Alla satser i ett kodblock ska ha samma indentering Samma antal blanksteg framför satsen 21
STYRA INSTRUKTIONSFLÖDET Satser och sammansatta satser Lite slarvig i kursboken Sats Det minsta självständiga uttrycket i ett imperativt programmeringsspråk. Tilldelningar Funktionsanrop etc. Sammansatta satser 22 kodblock eller sats som är knutet till ett kodblock Kodblock Villkorssatser
STYRA INSTRUKTIONSFLÖDET Villkorssatser Ett kodblock utförs enbart om ett villkor uppfylls if num > 10: print "Talet är större än 10" och ett annat om det är falskt. if num > 10: print "Talet är större än 10" else: print "Talet är mindre eller lika med 10" 23
STYRA INSTRUKTIONSFLÖDET Flera villkor 24 En variant där man kan välja mellan flera valmöjligheter if day == 1: print "Måndag" elif day == 2: print "Tisdag" elif day == 3: print "Onsdag" elif day == 4: print "Torsdag" elif day == 5: print "Fredag" elif day == 6: print "Lördag" elif day == 7: print "Söndag"
STYRA INSTRUKTIONSFLÖDET Repetition Ett kodblock upprepas (itereras) tills ett villkor är uppfyllt i = 1 while i < 10: print i i += 2 # Samma sak som att skriva i = i + 2 25
STYRA INSTRUKTIONSFLÖDET Iterera över en sekvens Om man vill upprepa ett kodblock för varje element i en lista personer = ["Katrin", "Pelle", "Ida", "Thomas"] for person in personer: print person 26
STYRA INSTRUKTIONSFLÖDET Iterera över ett intervall Det är ofta man vill upprepa något ett visst antal gånger Funktionen range skapar en lista med heltal inom ett intervall range(4) # Ger listan [0, 1, 2, 3] range(-1,2) # Ger listan [-1, 0, 1] range(1,7,2) # Ger listan [1, 3, 5] Kombinerat med for ger detta ett kraftfullt verktyg for i in range(5,9): print i for i in range(0,10,2): print i 27
Modulen sys 28
MODULEN S Y S Använda moduler Som vi sa i första lektionen finns många moduler med ytterligare funktioner att använda. Modulen sys ger tillgång till funktioner och uppgifter om själva programmet och operativsystemet (systemet) Moduler läggs till i programmet med import Detta gör vanligtvis först i programmet 29
MODULEN S Y S Argument till program Praktiskt är att kunna skicka med information när man startar ett program >>> python intervall.py 4 7 Denna information samlas i en lista som heter sys.argv Allt i denna lista är strängar och första värdet är programnamnet. 30
MODULEN S Y S Exempel # Programmet vill ha två värden när det körs. # Programmet skriver ut en sekvens av värden # där första värdet är startvärdet och sista # värdet är stoppvärdet. import sys start = int (sys.argv[1]) stop = int(sys.argv[2]) for i in range(start, stop+1): print i 31
MODULEN S Y S Avsluta program Program kan även avslutas i förtid # Programmet skriver ut värden mellan # 0 och talet som anges import sys max = int(sys.argv[1])+1 if max < 1: print "First argument must be positive" sys.exit(0) for i in range(max): print i 32