Operatorer och logiska uttryck
Behärska aritmetiska och logiska operatorer för att beräkna värden och skapa villkor.
Ca 45 min · del av Programmering i Python
Begrepp i lektionen
- aritmetik
- jämförelseoperatorer
- logiska operatorer
- and/or/not
Efter denna lektion kommer du att behärska alla grundläggande aritmetiska och logiska operatorer i Python. Du kommer att kunna utföra komplexa beräkningar, jämföra värden och bygga sammansatta villkorsuttryck för styrning av programflöden.
Aritmetiska operatorer i Python
Aritmetiska operatorer används för att utföra matematiska beräkningar på numeriska datatyper (heltal `int` och flyttal `float`). Python stödjer alla standardmässiga räknesätt samt ett par särskilt användbara operatorer för heltalsräkning.
De grundläggande operatorerna är addition (`+`), subtraktion (`-`), multiplikation (`*`) och division (`/`). Notera att vanlig division i Python 3 alltid returnerar ett flyttal, vilket innebär att `6 / 3` ger `2.0` och inte heltalsvärdet `2`.
För utökad beräkning erbjuder Python tre specialiserade operatorer:
1. Heltalsdivision (`//`): Dividerar två tal och avrundar nedåt till närmaste heltal. Exempelvis ger `7 // 2` resultatet `3`.
2. Modulus (`%`): Returnerar resten som uppstår vid en heltalsdivision. Exempelvis ger `7 % 2` resultatet `1`, eftersom 2 går 3 hela gånger i 7 med resten 1. Modulus är mycket användbart för att kontrollera om ett tal är jämnt (dvs. `tal % 2 == 0`) eller för att skapa cykliska sekvenser.
3. Exponentiering (``): Upphöjer basen till exponenten. Exempelvis beräknas 2 upphöjt till 3 som `2 3`, vilket ger `8`.
När du kombinerar flera operatorer följer Python standardmässiga matematiska prioritetsregler (PEMDAS/BODMAS): exponentiering först, därefter multiplikation/division/modulus, och sist addition/subtraktion. Du kan använda parenteser `()` för att tvinga fram en specifik beräkningsordning.
Jämförelseoperatorer och booleska värden
Jämförelseoperatorer används för att ställa frågor om relationen mellan två värden. Resultatet av en jämförelse blir alltid ett booleskt värde: antingen `True` (sant) eller `False` (falskt).
Följande jämförelseoperatorer finns i Python:
- `==` Likhet (är värdena lika?)
- `!=` Olikhet (är värdena olika?)
- `<` Mindre än
- `>` Större än
- `<=` Mindre än eller lika med
- `>=` Större än eller lika med
En vanlig källa till fel för nybörjare är skillnaden mellan ett enskilt likhetstecken `=` och ett dubbelt likhetstecken `==`. Ett enskilt likhetstecken är en tilldelningsoperatör som sparar ett värde i en variabel (`x = 5`), medan dubbla likhetstecken är en jämförelseoperatör som prövar om två värden är lika (`x == 5`).
Du kan jämföra både tal och andra datatyper som strängar. Vid strängjämförelse jämförs tecknen utifrån deras Unicode-koder, vilket innebär att jämförelsen sker i alfabetisk ordning (exempelvis är `"apa" < "bep"` sant, och `"A" == "a"` är falskt eftersom Python är skiftlägeskänsligt).
Logiska operatorer: and, or, not
När du vill bygga mer komplexa beslutsregler behöver du kombinera flera jämförelser. Detta görs med de logiska operatorerna `and`, `or` och `not`.
- `and` (OCH): Returnerar `True` endast om *båda* delvillkoren är sanna. Om det vänstra villkoret är falskt behöver Python inte ens utvärdera det högra (så kallad *kortslutningsevaluering* eller short-circuit evaluation).
- `or` (ELLER): Returnerar `True` om *minst ett* av delvillkoren är sant. Det returnerar endast `False` om båda delvillkoren är falska.
- `not` (ICKE): Inverterar det booleska värdet. Om ett villkor är `True` blir `not villkor` istället `False`, och vice versa.
Prioritetsordning för operatorer
När ett uttryck innehåller flera typer av operatorer utvärderar Python dem i en bestämd ordning:
1. Parenteser `()`
2. Aritmetiska operatorer (`**`, `*`, `/`, `//`, `%`, `+`, `-`)
3. Jämförelseoperatorer (`==`, `!=`, `<`, `>`, `<=`, `>=`)
4. `not`
5. `and`
6. `or`
Att ha koll på att `not` utvärderas före `and`, och `and` före `or`, är avgörande för att undvika logiska fel i programmet.
Kedjade jämförelser och praktisk tillämpning
Python har en mycket elegant och unik funktion jämfört med många andra programmeringsspråk: kedjade jämförelser (chained comparisons).
I matematiska sammanhang skriver vi ofta att ett tal x ska ligga i ett visst intervall, exempelvis att x är större än eller lika med 5 och mindre än eller lika med 15: 5 ≤ x ≤ 15. I språk som C++ eller Java måste detta skrivas som två separata villkor hopkopplade med ett logiskt OCH: `5 <= x && x <= 15`.
I Python kan du skriva detta precis som i matematiken:
python
x = 10
if 5 <= x <= 15:
print("x ligger i intervallet [5, 15]")
Python översätter automatiskt `5 <= x <= 15` till `(5 <= x) and (x <= 15)`, men koden blir avsevärt lättare att läsa och skriva.
Du kan också kedja fler jämförelser efter varandra, t.ex. `a < b == c < d`, även om det kan bli svårt att läsa om det överdrivs. Att använda kedjade jämförelser för att kontrollera om ett värde befinner sig inom ett intervall är dock en mycket god och etablerad konvention i Python.
Hela kursen
- Variabler, datatyper och I/O
- Operatorer och logiska uttryck
- Villkorssatser
- Slingor och iteration
- Listor och sekvenser
- Tupler och mängder
- Dictionaries
- Iteration och list comprehension
- Funktionsdefinitioner och parametrar
- Variablers räckvidd (Scope)
- Moduler och Pythons standardbibliotek
- Läsa och skriva filer
- Felhantering och undantag
- Text- och databearbetning