post

Python nb-no:Operatorer og uttrykk

Contents

Introduksjon

De fleste påstandene (logiske linjer) du kommer til å skrive vil inneholde uttrykk. Et uttrykk er for eksempel 2 + 3. Du kan dele dem opp i operatorer og operander.

Operatorer er funksjoner som gjør noe og blir representert av symboler (som +) eller spesielle nøkkelord. Operatorer trenger noe data de kan operere med, og dette kalles operander. I dette tilfellet er 2 og 3 operander.

Operatorer

Vi skal ta en liten titt på operatorene og hvordan du bruker dem.

Legg merke til at du kan evaluere uttrykkene fra eksemplet ved å bruke tolkeren. For eksempel kan du teste uttrykket 2 + 3 ved å bruke tolkekommandolinjen:

>>> 2 + 3
5
>>> 3 * 5
15
>>>
Operatorer og hva du bruker dem til

Operator

Navn

Forklaring

Eksempler

+

Pluss

Legger sammen to objekter

3 + 5 gir 8. 'a' + 'b' gir 'ab'.

Minus

Gir et negativt tall eller trekker et tall fra et annet

-5.2 gir et negativt tall. 50 - 24 gir 26.

*

Multiplisere

Gir produktet av to tall eller en streng gjentatt et antall ganger.

2 * 3 gir 6. 'la' * 3 gir 'lalala'.

**

Potens

Gir x opphøyd i y

3 ** 4 gir 81 (det vil si 3 * 3 * 3 * 3)

/

Divider

Dividerer x med y

4 / 3 gir 1.3333333333333333.

//

Gulvdivisjon

Gir resultatet av et delestykke rundet ned til nærmeste hele tall

4 // 3 gir 1.

%

Restdivisjon

Gir resten etter en divisjon

8% 3 gir 2. -25.5% 2.25 gir 1.5.

<<

Venstreskift

Flytter bitene i tallet til venstre med antallet biter du har oppgitt (tall skrives som binærtall (0 og 1) i minnet).

2 << 2 gir 8. 2 skrives som 10 i biter. Å skifte til venstre med 2 biter gir 1000 som står for tallet 8 (i titallssystemet).

>>

Høyreskift

Flytter bitene i tallet til høyre med antallet biter du har oppgitt.

11 >> 1 gir 5. 11 skrives som 1011 som blir til 101 når det flyttes til høyre med en bit, og det blir 5 i titallssystemet.

&

Bitwise AND

Bitwise AND for tallene

5 & 3 gir 1.

|

Bitwise OR

Bitwise OR for tallene

5 | 3 gir 7

^

Bitwise XOR

Bitwise XOR for tallene

5 ^ 3 gir 6

~

Bitwise invert

Bitwise-inversjonen til x er -(x+1)

~5 gir -6.

<

Mindre enn

Forteller om x er mindre enn y. Alle sammenligningsoperatorer gir enten True eller False. Legg merke til at navnene har stor bokstav.

5 < 3 gir False og 3 < 5 gir True.
Sammenligninger kan lenkes sammen: 3 < 5 < 7 gir True.

>

Større enn

Forteller om x er større enn y

5 > 3 gir True. Hvis begge operandene er tall, blir de først konvertert til en felles type. Ellers gir operatoren alltid False.

<=

Mindre enn eller lik

Forteller om x er mindre enn eller lik y

x = 3; y = 6; x <= y gir True.

>=

Større enn eller lik

Forteller om x er større enn eller lik y

x = 4; y = 3; x >= 3 gir True.

==

Er lik

Forteller om operandene er like

x = 2; y = 2; x == y gir True.

x = 'str'; y = 'stR'; x == y gir False.

x = 'str'; y = 'str'; x == y gir True.

!=

Er ulik

Forteller om objektene er ulike

x = 2; y = 3; x!= y gir True.

not

Booleansk NOT

Hvis x er True gir den False. Hvis x er False gir den True.

x = True; not y gir False.

and

Booleansk AND

x and y gir False hvis x er False, hvis ikke gir den en evaluering av y

x = False; y = True; x and y gir False siden x er False. I dette tilfellet vil ikke Python evaluere y siden det at den venstre siden av ‘and’-uttrykket er False som bestemmer at hele uttrykket vil være False uavhengig av de andre verdiene. Dette kalles kortslutningsevaluering.

or

Booleansk OR

Hvis x er True gir den True hvis ikke gir den en evaluering av y

x = True; y = False; x or y gir True. Kortslutningsevaluering gjelder også her.

Operatorpresedens

Hvis du hadde et uttrykk som 2 + 3 * 4, skal man legge sammen eller multiplisere først? Ungdomsskolematematikken forteller oss at multiplikasjonen skal gjøres først. Dette betyr at multiplikasjonsoperatoren har høyere presedens enn addisjonsoperatoren.

Den følgende tabellen er operatorpresedenstabellen for Python, fra lavest (minst bindende) til den høyest (mest bindende). Dette betyr at i et gitt uttrykk vil Python evaluere operatorene som er lavere i tabellen før operatorene som er høyere i tabellen.

Den følgende tabellen (tatt fra Pythons referansemanual) er her for helhetens skyld. Det er langt bedre å bruke parenteser for å sette sammen operatorer og operander skikkelig for å uttrykkelig spesifisere hva som har presedens. Dette gjør programmet lettere å lese. Se #Evalueringsorden under for detaljer.

<captionpresedens
</caption>

Operator

Beskrivelse

lambda

Lambdauttrykk

or

Booleansk OR

and

Booleansk AND

not x

Booleansk NOT

in, not in

Medlemskapstester

is, is not

Identitetstester

<, <=, >, >=,!=, ==

Sammenligninger

|

Bitwise OR

^

Bitwise XOR

&

Bitwise AND

<<, >>

Shifts

+, –

Addisjon og subtraksjon

*, /, //, %

Multiplikasjon, division, gulvdivisjon and restdivisjon

+x, -x

Positiv og negativ

~x

Bitwise NOT

**

Eksponensiering

x.attribute

Attributtreferanse

x[index]

Abonnement

x[index1:index2]

Slicing

f(arguments …)

Funksjonspåkalling

(expressions, …)

Binding eller tuple-visning

[expressions, …]

Listevisning

{key:datum, …}

Oppslagsvisning

Operatorene som vi ikke allerede har vært borti vil bli forklart i senere kapitler.

Operatorer med samme presedens står på samme rad i tabellen ovenfor. For eksempel har + og - samme presedens.

Evalueringsorden

Som standard forteller operatorpresedenstabellen hvilke operatorer som evalueres før andre. For å gjøre uttrykket mer lesbart kan du bruke parenteser. For eksempel er det definitivt lettere å forstå 2 + (3 * 4) enn 2 + 3 * 4, siden man trenger kunnskap om operatorpresedens. Som med alt annet burde man bruke parenteser med måte. Ikke overdriv bruken der de er overflødige (som i 2 + (3 + 4)).

Hvis du vil endre rekkefølgen uttrykkene blir evaluert i kan du nok en gang bruke parenteser. For eksempel kan du skrive noe sånt som (2 + 3) * 4 hvis du vil at addisjonen skal evalueres før multiplikasjonen.

Assosiativitet

Regnerekkefølgen for operatorer med samme presedens er fra venstre til høyre. For eksempel blir 2 + 3 + 4 evaluert som (2 + 3) + 4. Noen operatorer, som tildelingsoperatorer har assosiativitet fra høyre til venste, det vil si at a = b = c behandles som a = (b = c)

Uttrykk

Bruke uttrykk

Eksempel:

#!/usr/bin/python
# Filnavn: uttrykk.py

lengde = 5
bredde = 2

areal = lengde * bredde
print('Arealet er', areal)
print('Omkretsen er', 2 * (lengde + bredde))

Output:

   $ python expression.py
   Arealet er 10
   Omkretsen er 14

Hvordan det virker:

Lengden og bredden til rektanglet lagres i variabler med samme navn. Vi bruker disse for å regne ut arealet og omkretsen til rektanglet ved hjelp av uttrykk. Vi lagrer resultatet til uttrykket lengde * bredde i variabelen areal og skriver det så ved å bruke print-funksjonen. I de andre tilfellet bruker vi verdien til uttrykket 2 * (lengde + bredde) direkte i print-funksjonen.

Legg også merke til hvordan Python ‘finskriver’ outputen. Selv om vi ikke har skrevet noe mellomrom mellom 'Arealet er' og variabelen areal setter Python det der for os slik at vi får ren og pen output og programmet blir langt lettere å lese (siden vi ikke trenger å bekymre oss for mellomrom i strengene vi bruker til output). Dette er et eksempel på hvordan Python gjør livet lettere for programmereren.

Sammendrag

Du har sett hvordan du skal bruke operatorer, operander og uttrykk – disse er de grunnleggende byggeklossene til ethvert program. Nå skal vi se på hvordan vi gjør nytte av disse i programmene våre ved å bruke påstander.