Introduktion till programmering Föreläsning 2: Variabler, uttryck och satser 1 1
Värden De grundläggande saker som en dator manipulerar resultaten av beräkningar kallas värden Värden vi stött på: 2 och "Hello, World!" Olika typer av värden: 2 är ett heltal (integer) "Hello, World!" är en sträng av tecken (string) Tal med decimaler utgör en egen typ: 2.0 och 3.14 är exempel på flyttal (float) Observera citat-tecknen: "2" och "3.14" är båda värden av typen string 2 2
Om typer Vi kan fråga interpretatorn vad ett värde har för typ: >>> type("hello, World!") <type 'str'> >>> type(17) <type 'int'> >>> type(3.14) <type 'float'> >>> type("3.14") <type 'str'> (Konvention: >>> markerar interaktion med interpretatorn, blå färg är text vi själva skriver) 3 3
Flyttal Observera att flyttal skrivs med decimal-punkt, ej komma: >>> print 3.14 3.14 Om vi försöker använda decimal-komma blir vi dock förvånade: >>> print 3,14 3 14 Orsak: print tar egentligen en komma-separerad lista av värden, som sedan skrivs ut med inskjutna mellanslag! 4 4
Variabler Central egenskap hos programspråk: att kunna ge namn åt värden. Dessa namn kallas variabler. "Ge en variabel ett värde" synonymt med "ge värdet ett namn" I Python: >>> message = "What's up, Doc?" >>> n = 17 >>> pi = 3.14159 5 5
Variabler print och type fungerar också för variabler: >>> print n 17 >>> print pi 3.14159 >>> type(n) <type 'int'> >>> type(message) <type 'str'> 6 6
Tillstånd Uppsättningen definierade variabler och deras värden förändras normalt under ett programs gång Det tillstånd ett program har i ett visst ögonblick kan beskrivas av en figur som anger de definierade variablernas värde: message n pi "What's up, Doc?" 17 3.14159 Vi kommer att se många sådana figurer framöver 7 7
Regler för variabler Ok: n, pi, x, bruce, Bruce, Bruce_Wayne, bruce9 Felaktig syntax: 76trombones, more$, Bruce Wayne, class Namnet class är felaktigt som variabelnamn eftersom det är ett s k nyckelord i Python. Nyckelord har speciell betydelse och kommer att förklaras efter hand. Övriga nyckelord: and assert break continue def del elif else except, exec finally for from global if import in is lambda not or pass print raise return try while yield 8 8
Satser En sats (statement) är en instruktion till datorn att utföra något.vi använder ibland ordet kommando också Satser vi sett hittills: print och variabeltilldelning Ett script är en sekvens av satser (dvs en följd av kommandon). Exempel: print 1 x=2 print x Kan läggas i en fil (säg test.py) och köras. Resultat: 1 2 9 9
Uttryck och evaluering Ett uttryck (expression) är en kombination av värden, variabler och matematiska operatorer. Exempel: >>> print 1+1 2 Betydelse: evaluera först uttrycket 1+1 till ett värde, skriv sedan ut detta värde Exempel på uttryck: 10 1+1 17 x 19*2-3 OBS: ett ensamt uttryck på en rad ger också en utskrift av utryckets värde. Två skillnader gentemot print: Citat-tecknen försvinner inte för strängar Fungerar bara interaktivt, ignoreras i script 10
Operatorer och operander Fler exempel på Python-uttryck: 20+32 hour-1 hour*60+minute minute/60 5**2 (exponent-operation) (5+9)*(15-7) +, -, *, /, ** kallas operatorer, de arbetar på operander Betydelsen är den förväntade. Observera dock: >>> 10/3 3 (heltalsdivision!) 11 11
Flyttalsoperatorer De matematiska operatorerna är även definierade för flyttal: 2.5 + 1.0 (evaluerar till 3.5) 2.5 + 1 (evaluerar också till 3.5) 2.0**3.0 (evaluerar till 8.0) 16**0.5 (evaluerar till 4.0) -1 * 0.5 (evaluerar till -0.5) Division för flyttal är den förväntade operationen: >>> print 10.0/3 3.33333333333 Regel: om en operand är en float konverteras den andra automatiskt (om den är en int) 12 12
Evalueringsordning Python följer den etablerade precedens-ordningen för matematiska operatorer. Minnesregel PEMDAS (Parentes, Exp, Mult, Div, Add, Sub) Exempel: 2 * (3-1) (1+1)**(5-2) (3 * 100) / 60 3 * 100 / 60 3*1**3 2 * 3-1 1+2 / 3 2*2 2 ** 3 300 / 60 (3*100) / 60 3 * (1**3) (2*3) - 1 1 + (2/3) 13 13
Uttryck med strängar Antag att vi definierat message = "abc" Följande är felaktiga uttryck (resulterar i run-time-fel): message-1 message*"hello" "15"+2 Regel: matematik fungerar bara på heltal (och flyttal) Men: operatorerna + och * har i Python getts en annan betydelse för just strängar: >>> fruit = "banana" >>> print fruit + " nut bread" banana nut bread >>> print "Fun" * 3 FunFunFun 14 14
Observation: 4*3 4+4+4 "Fun"*3 "Fun"+"Fun"+"Fun" Där slutar dock överensstämmelsen med heltalen! 7+3 3+7 är inte lika med "def"+"abc" "abc"+"def" Observera: + är definierad för heltal + heltal samt sträng + sträng * är definierad för heltal * heltal samt sträng * heltal (Dessutom har vi flyttalen, och många operatorer är definierade för andra typer också mer om det senare) 15 15
Sammansatta uttryck Operander kan själva vara uttryck eller variabler vi kan alltså sätta samman större uttryck från mindre delar: >>> print "Minutes left:", hours*60 + minutes Minutes left: 72 >>> percentage = (minutes * 100) / 60 >>> claim = " is " + "Fun"*3 + " indeed!" Större program (script) är i allmänhet fulla av sådana sammansatta uttryck. Är man osäker kan man dock alltid införa namn på deluttrycken: >>> m100 = minutes * 100 # temporary variable >>> percentage = m100 / 60 # integer division! 16 16