Innhold
Aritmetiske operatorer
Når vi utfører regneoperasjoner i Python, for eksempel beregner 2 + 2, bruker vi aritmetiske operatorer.
Operatorene for de fire vanlige regneartene er
| + | Addisjon |
| – | Subtraksjon |
| * | Multiplikasjon |
| / | Divisjon |
I tillegg har vi
| ** | Eksponentiering |
| // | Heltallsdivisjon |
| % | Modulus |
En heltallsdivisjon er en divisjon der resultatet rundes nedover til nærmeste heltall. For eksempel er 43 // 8 = 5.
Modulus er resten vi får ved heltallsdivisjon. For eksempel er 43 % 8 = 3 fordi 43 = 5 · 8 + 3.
Eksempel 1:
Vi skal bruke Python til å regne ut 5 · 32.
I editoren skriver vi
print(5 * 3**2)
Når vi kjører koden, svarer Python 45.
Bruk Python til å regne ut 7 + 42.
Sammensatte uttrykk
Alle de nevnte operatorene er binære, det vil si at de opererer på to verdier av gangen, for eksempel 2 + 3 og 3 * 5. Vi kan riktignok sette opp uttrykk med flere operatorer, for eksempel 2 + 3 * 5, men operatorene brukes likevel på to verdier av gangen. Det gjøres imidlertid ikke slavisk i den rekkefølgen operatorene står, men etter en fast definert prioritering. Multiplikasjon og divisjon har for eksempel høyere prioritet enn addisjon og subtraksjon, og alt med samme prioritet gjøres fra venstre mot høyre. For eksempel:
2 + 3 * 5 → 2 + 15 → 17.
og
2 + 3 * 4 / 2 * 7 → 2 + 12 / 2 * 7 → 2 + 6 * 7 → 2 + 42 → 44.
Dette er vanlige prioriteringsregler som vi kjenner fra matematikken. Vil vi endre på prioriteringen, setter vi inn parenteser.
Beregn 3 + (8 + 2) / 5 * 3.
Gjør først beregningen i hodet, eller med penn og papir, og sjekk så i Python om du har rett.
Desimaltall og desimalskilletegn
Beregner vi uttrykket 4 / 2 i Python, får vi svaret 2.0, ikke 2. Det er fordi resultatet av en divisjon i Python alltid blir regnet som et desimaltall, selv om divisjonen går opp.
Vi legger også merke til at det er punktum, ikke komma, som er desimalskilletegn. Det er ganske standard i programmering, antakelig fordi punktum fungerer som desimalskilletegn i mange land. Det er imidlertid en feilkilde for oss som er vant med å bruke komma, for komma har en annen betydning i Python. Skriver vi for eksempel 2,3 i stedet for 2.3, tolker Python det som tallparet (2, 3).
Bruk av mellomrom
I oppgave 2 skrev vi uttrykket 3 + (8 + 2) / 5 * 3. Der brukte vi mellomrom, altså blanke tegn, rundt en del av operatorene. Det har egentlig ingen betydning for Python, om vi skriver 3+(8+2)/5*3, blir resultatet akkurat det samme. Mellomrom gjør imidlertid ofte uttrykk lettere å lese for mennesker. Pythons stilguide, PEP 8, krever ikke mellomrom, men sier at hvis vi bruker mellomrom, skal det være maksimum ett mellomromstegn av gangen, og tegnene skal brukes symmetrisk. Altså for eksempel 2 + 3, ikke 2 + 3 eller 2+ 3. PEP 8 foreslår også å bruke mellomrom til å indikere prioritet, slik som for eksempel i uttrykket fra eksempel 1, print(5 * 3**2), der vi ikke har mellomrom rundt eksponentieringsoperatoren ** for å presisere at eksponentieringen gjøres før multiplikasjonen. Det viktigste er imidlertid at uttrykkene blir lesbare.
Unære operatorer
Av og til ønsker vi å skifte fortegn på noe, og det gjør vi ved å sette et minus-tegn foran det vi skal skifte fortegn på, for eksempel -2 eller -x. Dette er egentlig bruk av en aritmetisk operator som skifter fortegn på det som følger etter. Selv om vi benytter akkurat samme symbol som ved subtraksjon, er det allikevel ikke samme operator.
Minus-tegnet vi bruker ved subtraksjon, er binært, vi bruker det altså på to verdier, for eksempel 5 - 3. Minus-tegnet vi bruker ved fortegnsskifte, er unært, vi bruker det altså på en enkelt verdi, for eksempel -3. Grunnen til at vi poengterer dette, er at de to variantene har forskjellig prioritet. Det finnes også et unært pluss, det har ingen effekt, men vi kan teknisk sett bruke det, og for eksempel skrive 3 som +3.
Prioriteringsrekkefølge
I sammensatte uttrykk brukes operatorene i denne rekkefølgen:
-
- () Parenteser. Parenteser inni hverandre beregnes innenfra og ut.
- ** Eksponentiering.
- + og – Unært pluss og minus.
- * og / og // og % Multiplikasjon, divisjon, heltallsdivisjon og modulus.
- + og – Addisjon og subtraksjon.
Operatorer med samme prioritet brukes fra venstre mot høyre.
Se film om aritmetiske operatorer
−1 opphøyd i andre er 1. Men hvis vi skriver -1**2 i Python, får vi −1 i stedet for 1. Hva er grunnen til det, og hva må vi gjøre for å få det riktig?
Kilder
-
- Matthes A. (2019). Python Crash Course. no starch press
I mange programmeringsspråk, som C og JavaScript, brukes «hatt», altså symbolet ^, i stedet for ** for eksponentiering.